考虑以下rawtype形式的java泛型类层次结构。
class A ...
class B extends A ...
class C extends A ...
使用类a中的方法,并在B和C中重写。
String foo() ...
String bar(A a) ...
我们可以成功地拨打以下电话。
String r = (new B()).foo();
String r = (new B()).bar(new C());
这里的真正目标是在容器中保存
把它们都处理掉,不管我们是哪种人。
A fred;
List as = new LinkedList();
for (A a : as) ... fred.bar(a); ...
类B和类C的对象可以构造并毫无问题地传递给foo。
现在我们介绍泛型。
class A<T,U,V> ...
class B<T> extends A<T,Void,Object> ...
class C<N> extends A<String,Void,Object> ...
使用类a中的方法,并在B和C中重写。
T foo() ...
然后我们打以下合理的电话。
String r = (new A<String,Void,Object>()).foo();
String r = (new B<String>()).foo();
String r = (new C<Integer>()).foo();
String r = (new B<String>()).foo();
String r = (new B<String>()).bar(new C<Integer>());
这里的真正目标是在容器中保存
把它们都处理掉,不管我们是哪种人。
A<String,String,Integer> fred;
List<A<String,String,Integer>> as = new LinkedList<>();
for (A a : as) ... fred.bar(a); ...
这些决定使得无法将B和C类型的对象加载到“as”列表中,
由于泛型模板中的类型冲突。
请注意,这是一个现有的软件,我正在尝试清除警告。