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

Java 我创建的类是否可以自动装箱?,java,autoboxing,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 i

有没有办法对我创建的类使用自动装箱?例如,我有一个子类
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=newunsignedinteger(88)
工作得非常好,但是有没有办法让这个编译:
UnsignedInteger i=88?这对我来说不合适。提前谢谢

不幸的是,没有。(根据)仅为标准定义。

简言之,没有。无法将其编译

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

从:

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

  • 从布尔类型到布尔类型

  • 从类型字节到类型字节

  • 从短型到短型

  • 从类型char到类型char

  • 从int类型到Integer类型

  • 从long类型到long类型

  • 从类型float到类型float

  • 从double类型到double类型

  • 从空类型到空类型

另外,可能会考虑重载<代码>=/Cux>运算符来执行此转换,但是在java中不支持运算符重载,这与C++不同,在这里可能是。


因此,您的转换在Java中是不可能的。

简而言之:不,这是不可能的。要使其工作,您需要运算符重载,这在Java中是不可用的。请参阅。

如果使用Groovy,可以通过实现asBoolean方法来设置布尔行为:

例如:

class Color {
    String name

    boolean asBoolean(){
        name == 'green' ? true : false
    }
}

assert new Color(name: 'green')
assert !new Color(name: 'red')

我知道这不是普通的Java,而是编译成字节码并在JVM上运行。

这是个好消息。我刚刚向Oracle提交了一个功能请求,请求添加对上述语法的支持。我们希望它能被接受。我们可以认为java重载了运算符+、*、或/,-但这实际上是使用该运算符进行操作的自动装箱。请参阅oracle规范