我创建的类是否可以自动装箱?

2022-09-01 19:05:32

有没有办法对我创建的类使用自动装箱?例如,我有这个子类。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;


答案 1

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

Java 仅定义了一组有限的预定义框转换。

来自 JLS,第 5.1.7 节

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

  • 从布尔类型到布尔类型

  • 从类型字节到类型字节

  • 从类型短到类型短

  • 从字符类型到字符类型

  • 从类型 int 到类型整数

  • 从键入长型到键入长型

  • 从类型浮点数到类型浮点数

  • 从双类型到双类型

  • 从空类型到空类型

此外,人们可能会考虑重载运算符以执行此转换,但是在Java中不支持运算符重载,这与C++不同,在C++中这是可能的。=

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


答案 2

不,很遗憾。自动装箱转换(根据 JLS §5.1.7)仅针对标准基元包装类定义。


推荐