2013-07-12 58 views
21

有什么办法可以为我创建的类使用自动装箱吗?例如,我有这个Number的子类。我创建的类可以自动装箱吗?

public class UnsignedInteger extends Number { 
    int n; 

    public UnsignedInteger(int n) { 
     if(n >= 0) 
      this.n = n; 
     else 
      throw new IllegalArgumentException("Only positive integers are supported"); 
    } 
} 

现在,UnsignedInteger i = new UnsignedInteger(88);工作完全正常,但有什么办法,使这个编译:UnsignedInteger i = 88;?它不适合我。提前致谢!

+0

这个问题的好消息。我刚刚向Oracle提交了一个功能请求,用于添加对上述语法的支持。让我们希望它被接受。 – Boggartfly

回答

16

总之,没有。没有办法去编译。

Java只定义了一组有限的预定义装箱转换。

JLS, section 5.1.7

拳击转换是转换原始类型的表达式对应的参考类型的表达式。具体来说,以下九个转换被称为装箱转换:

  • 从布尔型输入布尔

  • 从类型字节输入字节

  • 从类型短类型的短

  • 从字符型到字符型字符

  • 字符型int Integer类型

  • 从long类型为long类型

  • 从float类型为float类型

  • 从double类型从空类型类型双

  • 为空型

此外,有人可能请考虑重载=运算符以执行此转换,但运算符重载在Java中不受支持,与C++不同,在这种情况下这是可能的。

所以你的转换在Java中是不可能的。

+0

我们可以认为java重载了operator +,*或/,但是这实际上是自动装箱操作。请参阅oracle规范https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html – kelgwiin

1

总之:不,这是不可能的。为此,您需要运算符重载,这在Java中不可用。请参阅link

相关问题