可能重复:
Is List<Dog> a subclass of List<Animal>? Why aren't Java's generics implicitly polymorphic?
Java Generics — Assigning a list of subclass to a list of superclass原始类型和泛型 - Java的
随着原料的类型,你可以很容易地说这句话。
[...] // MyClass is generic with upper bound of Object
MyClass c = new MyClass<Double>();
[...]
但是,这是不允许的
MyClass<Number> c = new MyClass<Double>()
我不明白这是为什么。我的书告诉我为什么第二个不起作用,因为你不能将Integer加到MyClass<Double>
。它没有解释的是为什么MyClass<Double>
是MyClass<Object>
(或等价的原始类型形式)的子类,因为double是对象的子类。
那么为什么第一个允许,如果第二个表格不是。请意识到我对此很陌生。
编辑:更进一步在第一个例子中,如果Number是上限,会发生什么?
你可以在这里看到类型擦除的影响
class Untitled {
public static void main(String[] args) {
}
public static<T> void c(T t)
{
t.SubClassMethod();// this won't work because class Object has no such method. But if I change the upperbound to SubClass it will.
t.toString() // this will because class Object has such a method
}
}
我的观点是,它为什么要不管是什么,如果它最终成为为上反正约束处理通用声明?
我的问题是相反的,我问你为什么可以分配到一个子类的原始类型 – rubixibuc 2012-03-18 23:47:47
这个问题的前提也是错误的,因为类型擦除它唯一担心的是上限是否与方法,并使用该类型来检查投射。至少这是我读过的 – rubixibuc 2012-03-18 23:49:58