加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Generics中原始类型和<?>之间的区别

发布时间:2020-12-14 05:58:07 所属栏目:Java 来源:网络整理
导读:它可能会被问到某个地方,但我找不到它. 请告诉我两者之间的确切区别: ArrayList list = new ArrayList(); 和 ArrayList? list = new ArrayList(); 我无法弄清楚这两者之间的确切区别. 谢谢… 解决方法 的ArrayList?简单地表示“任何类型”.换句话说,可以将
它可能会被问到某个地方,但我找不到它.

请告诉我两者之间的确切区别:

ArrayList list = new ArrayList();

ArrayList<?> list = new ArrayList();

我无法弄清楚这两者之间的确切区别.

谢谢…

解决方法

的ArrayList<?>简单地表示“任何类型”.换句话说,可以将任何类型的ArrayList分配给这样的变量.这可以是ArrayList< Integers>,ArrayList< JButton>或其他任何东西.单独使用通配符,不使用关键字super(后跟类型),意味着您不能将任何内容添加到定义为ArrayList<?>的列表中.但是,ArrayList本身就意味着旧式无类型ArrayList,您可以执行各种操作,包括添加.
List<?> list;
List<Integer> ints = new ArrayList<Integer>();
List<Integer> strings = new ArrayList<Integer>();
list = ints; // valid
list = strings; // valid
list.add("new"); // compile error

更新:

假设我有以下方法:

void insert(List list) {
   // loop through list,do whatever you like
   list.add("my string"); // dangerous operation 
}

现在,如果我调用insert(ints),编译器将生成警告,但不会阻止我将String添加到整数列表中.更改方法如下:

void insert(List<?> list) {
   // loop through list,do whatever you like
   list.add("my string"); // compiler error on this dangerous operation
}

会阻止我做这样的操作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读