考虑下面的通用方法程序:
class GenericTest {
int i;
}
public class GenericMethod {
public List addList(T t, T t1) {
List list=new ArrayList();
list.add(t);
list.add(t1);
return list;
}
public List addList(T t, T t1, List l) {
List list=new ArrayList();
list.add(t);
list.add(t1);
list.addAll(l);
return list;
}
public static void main(String[] args) {
GenericMethod gm=new GenericMethod();
List l=gm.addList(new Integer(42), "java"); //Line 21
System.out.println(l);
List list = new ArrayList();
list.add(false);
List l2 = gm.addList("java", new Integer(42), list); //Line 25
System.out.println(l2);
GenericTest gt = new GenericTest();
List l3 = gm.addList("java", gt); //Line 28
System.out.println(l3);
List l4 = gm.addList(gm, gt); //Line 30
System.out.println(l4);
List lst = new ArrayList();
lst.add(new Object());
List l5 = gm.addList("java", new Integer(42), lst); //Line 34
System.out.println(l5);
System.out.println(l5.get(0));
}
}
在第21行,因为该方法是使用String和Integer调用的,所以它使用Object for T调用方法.对于第25行也是如此,因为List也有类型Object,它使用Object for T调用方法.使用其他类型的Calling List将产生错误.我的推论是否正确?
我无法想到的是
1)传递String和类时的第28行,
2)当两个不同的班级通过时,第30行,
3)当没有类型声明的List作为参数传递时的第34行.
任何人都可以分享他们的知识来清除我的理解任何帮助,将不胜感激!谢谢!