(1) List<?> myList = new ArrayList<?>();
(2) ArrayList<?> myList = new ArrayList<?>();
Run Code Online (Sandbox Code Playgroud)
我理解,使用(1),可以交换List接口的实现.似乎(1)通常在应用程序中使用而不管需要(我自己总是使用它).
我想知道是否有人使用(2)?
此外,经常(并且我可以得到一个例子)情况实际上需要使用(1)over(2)(即where(2)不足以对接口和最佳实践等进行编码)
作为一个C++老朋友,我设法解决了我的问题,但我不能在这里围绕底层Java机制:
Vector<Object> x = new Vector<Object>(); // OK
ArrayList<Object> y = new ArrayList<Object>(); // OK
List<Object> zzz = new ArrayList<Object>(); // OK solves problem below but question remains
List<Object> z = new List<Object>(); // WHY? Compiler error: Cannot instantiate
Run Code Online (Sandbox Code Playgroud) 我发现ArrayList通过在日常编码中使用数组而不是使用数组,我几乎可以轻松地完成任何操作并且可以进行更多控制.所以我问:
ArrayList?ArrayList吗?以下两行之间是否存在差异?
ArrayList<String> arrName = new ArrayList<String>();
List<String> arrName = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
谢谢你的答复
我对Java很陌生,我想知道这实际上意味着什么:
List<Integer> list = new ArrayList<Integer>(); //Example 1
Run Code Online (Sandbox Code Playgroud)
为了将这个问题与其他问题区分开,我已经阅读了有关多态性以及示例1和示例2之间的区别的文章,并且我了解示例1允许“编程接口”。我还了解到,使用示例1,可以轻松将列表更改为LinkedList,而不会影响其余代码。
ArrayList<Integer> list = new ArrayList<Integer>(); //Example 2
Run Code Online (Sandbox Code Playgroud)
但是我想知道示例1的实际含义。是否创建一个新列表?还是创建一个新的ArrayList?结果对象是否具有列表的属性?还是生成的对象具有ArrayList的属性?我可以实现ArrayList在列表上使用的方法而没有编译错误吗?
这是我第一次发布问题,所以请让我知道是否可以进行任何改进。
List<EventHandler<E>> listeners = new List<EventHandler<E>>();
Run Code Online (Sandbox Code Playgroud)
为什么上面的行失败了:
无法实例化该类型
List<EventHandler<E>>
但是这个有效:
ArrayList<EventHandler<E>> listeners = new ArrayList<EventHandler<E>>();
Run Code Online (Sandbox Code Playgroud)