当前位置: 首页 > 知识库问答 >
问题:

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

夹谷晋
2023-03-14

有什么方法可以为我创建的类使用自动装箱吗?例如,我有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");
    }
}

现在,< code > UnsignedInteger I = new UnsignedInteger(88);工作得非常好,但是有什么方法可以让这个编译:< code > UnsignedInteger i = 88?对我来说不会。提前感谢!

共有3个答案

滑畅
2023-03-14

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

钱远
2023-03-14

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

东方森
2023-03-14

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

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

来自JLS,第5.1.7节:

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

>

  • 从类型boolean到类型boolean

    从字节类型到字节类型

    从短型到短型

    从字符型到字符型

    从int类型到整数类型

    从长型到长型

    从浮点型到浮点型

    从双倍型到双型

    从空类型到空类型

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

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

  •  类似资料:
    • 问题内容: 有什么方法可以对我创建的类使用自动装箱吗?例如,我有的子类。 现在,工作完全正常,但有什么办法,使这个编译:?不会适合我的 提前致谢! 问题答案: 简而言之,没有。没有办法将其编译。 Java仅定义了一组有限的预定义拳击转换。 在JLS中,第5.1.7节: 装箱转换将原始类型的表达式转换为引用类型的对应表达式。具体来说,以下九种转换称为装箱转换: 从布尔类型到布尔类型 从字节类型到字节

    • 问题内容: 有时,我创建一个装饰器类,如下所示: IntelliJ可以自动为我创建此类吗? 问题答案: 更新// 我注意到IntelliJ具有用于生成委托方法的“生成”选项。创建一个新类: 然后标记myInterface,转到“菜单”>“代码”>“委托方法”,选择要包装的所有方法,仅此而已。 //更新结束 您可以尝试“重构”->“用委派替换继承”重构。这样就应该能够做到。我称之为“使用Alt +

    • 问题内容: 为什么第二段代码更快? 问题答案: 自动装箱使用,内部将Integer对象缓存为小整数(默认情况下为-128至127,但是最大值可以使用“ java.lang.Integer.IntegerCache.high”属性进行配置-请参见Integer.valueOf的源代码) ,因此与直接调用不同。因为在调用之前可以快速检查整数值的大小,所以直接调用要快一些(尽管如果您有很多小整数,它会使

    • 本文向大家介绍自动装箱和拆箱?相关面试题,主要包含被问及自动装箱和拆箱?时的应答技巧和注意事项,需要的朋友参考一下 自动装箱是Java 编译器在基本数据类型和对应的对象包装类型之间做的一个转化。 比如:把int转化成 Integer,double转化成 Double,等等。反之就是自动拆箱。 原始类型: boolean,char,byte,short,int,long,float,double 

    • 有以下代码: 它打印: 12 这个不能编译。为什么?

    • 这看起来很奇怪,因为可以自动生成这些迁移(例如,像django一样),而且令人惊讶的是,V1的create-commands是自动生成的,但是如果我以后添加一个表,我必须手动键入命令。 那么,我是错过了它,还是我真的必须编写迁移?