我认为问题不在于泛型转换原语和包装。问题是关于将int转换为java.lang.Long和将int转换为java.lang.Short之间的区别。
JLS:“此外,如果该表达式是类型为byte,short,char或int的常量表达式(第15.28节):
- 如果变量的类型为byte,short或char,并且常量表达式的值可表示为变量的类型,则可以使用缩窄的原始转换。
- 如果变量的类型是:
- 字节和常量表达式的值可以在类型字节中表示。
- 短,常量表达式的值可以用短类型表示。
- 字符和常量表达式的值可以用char“类型表示。
因此,所有<= 32bit的原语都可以轻松地进行转换,而长(64bit)则需要特殊的转换。这似乎是不合逻辑的。
照常,所有不合逻辑的事情都可以解释Java的向后兼容性或历史演变。例如,从1.0版开始,java中就存在Integer和Long类。从1.1开始,java中就存在Short和Byte类。即在起点处整数可以是两种类型:整数或长整数。因此,我认为这两种数字有不同的转换规则。然后添加了short和byte。我想short和byte在具体的JVM中可以有32位实现。



