它可能会被问到某个地方,但我找不到它.
请告诉我两者之间的确切区别:
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 }
会阻止我做这样的操作.