起因:无界通配符<?>作为参数可以接受任意类型参数,入参的具体类型在调用方法时并不需要确定,联想到泛型方法中参数的类型是在调用方法时被定义,实践探究二者异同。
public class Generic01 {
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("test1");
arrayList.add("test2");
TestGeneric aa = new TestGeneric();
aa.getClass1(arrayList);
aa.getClass2(arrayList);
}
}
class TestGeneric{
public<T> void getClass1(List<T> t){
for (T t1 : t) {
System.out.println(t1.getClass());
}
}
public void getClass2(List<?> t){
for (Object o : t) {
System.out.println(o.getClass());
}
}
}
结论:public void aaa(List t) 方法是一个具有类型参数 T 的泛型方法,可以在方法内部具体地操作指定类型 T 的列表元素。而 public void bbb(List t) 方法使用了无界通配符 ,表示可以接受任意类型的列表参数,但方法内部无法确定具体的类型,只能将列表元素视为 Object 类型处理。因此,在方法内部对列表元素的操作受到一定限制。
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
暂无评论内容