Mat*_*det 4 java primitive autoboxing numbers wrapper
我了解Java不支持自定义自动装箱,但我也注意到可以扩展Number对象。由于数字对象本身似乎允许对原语进行自动装箱,因此可以这样做:
Number val = 5; //This compiles no problem
但是,如果我扩展Number并尝试使用子类型,则该程序将无法编译:
MyNumber num = 5; //This does not compile :(
我知道这是不允许的,在Java中可能永远不会允许,但是什么机制导致这种不连续性发生?是Number的包装器功能是否在类本身之外的地方处理,或者是否有某些特殊的封装阻止自定义包装器的创建?
5是整数文字。因此,其类型为int。
由于已将其分配给引用类型(数字)的变量,因此将自动装箱为其包装类型:java.lang.Integer。然后将此Integer分配给变量,并且由于Integer 是 Number而有效,因为Integer类扩展了Number类。
相反,Integer不扩展MyNumber。因此,将Integer分配给类型变量MyNumber是无效的:Integer不是MyNumber。
因此,这与取消装箱没有太大关系。这与你不能做的事实有关
MyNumber n = someInteger;
Run Code Online (Sandbox Code Playgroud)
就像你不能那样
MyNumber n = someString;
Run Code Online (Sandbox Code Playgroud)
:类型不兼容。
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |