泛型无界通配符<?>的思考

打印 上一主题 下一主题

主题 852|帖子 852|积分 2556

起因:无界通配符作为参数可以担当任意范例参数,入参的具体范例在调用方法时并不需要确定,联想到泛型方法中参数的范例是在调用方法时被定义,实践探究二者异同。
  1. public class Generic01 {
  2.     public static void main(String[] args) {
  3.         ArrayList<String> arrayList = new ArrayList<String>();
  4.         arrayList.add("test1");
  5.         arrayList.add("test2");
  6.         TestGeneric aa = new TestGeneric();
  7.         aa.getClass1(arrayList);
  8.         aa.getClass2(arrayList);
  9.     }
  10. }
  11. class TestGeneric{
  12.     public<T> void getClass1(List<T> t){
  13.         for (T t1 : t) {
  14.             System.out.println(t1.getClass());
  15.         }
  16.     }
  17.     public void getClass2(List<?> t){
  18.         for (Object o : t) {
  19.             System.out.println(o.getClass());
  20.         }
  21.     }
  22. }
复制代码
结论:public  void aaa(List t) 方法是一个具有范例参数 T 的泛型方法,可以在方法内部具体地操作指定范例 T 的列表元素。而 public void bbb(List t) 方法利用了无界通配符 ,表示可以担当任意范例的列表参数,但方法内部无法确定具体的范例,只能将列表元素视为 Object 范例处置惩罚。因此,在方法内部对列表元素的操作受到肯定限制。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

渣渣兔

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表