作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我知道,每个泛型类型变量都被替换为在方法“类型参数部分”开头的泛型定义中确定的上限。
这是来自Deitel的书
Actually, all type parameters are replaced with the so-called upper bound of the type parameter, which is specified in the type-parameter section.
据此,此子代码必须为真
public static <E extends Number> void A( )
{
E x= new Double(2.2);
}
但编译器告诉我 E x= new Double(2.2); 中存在编译错误,尽管这一定是真的,因为 double 是数字。
我知道如何通过转换处理和解决一般的问题,但我想问为什么会这样?
最佳答案
仅仅因为 E
是一个数字并不意味着它是一个 Double
。
可以这样想,如果 E 是一个整数会怎样。 E 仍然是一个数字,但现在您要将一个 double 分配给一个整数。所以类型转换行为是一致的,Number可以是各种不同的类型,E 也可以。
Op 编辑:Deitel 语句仍然正确,如果您将 Double 分配给数字或对象,则不需要转换。但是在这种情况下,E 不是“向上”分配,而是在两种可能的不同 Number 类型之间“横向”分配。如果 E 是 Short 或 Integer,在这些情况下,您不会期望能够在不强制转换的情况下为它们分配 Double。
关于java - 泛型和赋值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16824334/
我是一名优秀的程序员,十分优秀!