我创建的类可以进行自动装箱吗?

Jav*_*107 25 java autoboxing

有没有办法为我创建的类使用自动装箱?例如,我有这个子类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");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,UnsignedInteger i = new UnsignedInteger(88);工作得非常好,但有没有办法让这个编译:UnsignedInteger i = 88;?它不适合我.提前致谢!

rge*_*man 18

简而言之,没有.没有办法让它编译.

Java仅定义了一组有限的预定义装箱转换.

JLS,第5.1.7节:

拳击转换将基本类型的表达式转换为引用类型的相应表达式.具体来说,以下九个转换称为装箱转换:

  • 从类型布尔值到类型布尔值

  • 从类型字节到类型字节

  • 从短类型到短类型

  • 从类型char到类型字符

  • 从int类型到Integer类型

  • 从类型long到类型Long

  • 从类型float到类型Float

  • 从double类型到Double类型

  • 从null类型到null类型

另外,有人可能会考虑重载=操作符来执行此转换,但Java中不支持运算符重载,这与C++不同,在C++中这是可能的.

因此,您无法在Java中进行转换.


ars*_*jii 12

不,不幸的是.自动装箱转换(根据JLS§5.1.7)仅为标准原始包装类定义.