为什么1
为ok
但2
为compilation error
,3
为warning message
List
(List<E>
为原始类型。对泛型类型4
的引用应该参数化)而compilation error
再次给出1- List<Integer> list = new ArrayList<Integer>()//Ok
2- List<Integer> list = new List<Integer>()//compilation error
3- List<List> list = new ArrayList<List>()//Warning
4- List<Integer> list = new List<Integer>()//Compilation error
?
{{1}}
答案 0 :(得分:4)
List
是interface
。
ArrayList
是一个implements
List
。
将List
视为可以有多个实施的合同(ArrayList
,LinkedList
)
答案 1 :(得分:2)
ArrayList
是类,可以实例化。所以,1中没问题。List
是界面。您无法实例化界面。所以,2和4中的编译错误。答案 2 :(得分:2)
似乎你对Java很新。原因是List是一个界面。如果看到接口的定义,则无法实例化它。 ArrayList是List接口的一个实现,你可以实例化它。
答案 3 :(得分:1)
1 - List<Integer> list = new ArrayList<Integer>()//Ok
由于ArrayList
实施List
所以ArrayList
is a List
,并且可以通过List
类型的引用变量指出
2- List<Integer> list = new List<Integer>()//compilation error
您无法将List
的对象创建为interface,而不是类。
3- List<List> list = new ArrayList<List>()//Warning
因为内部List
不知道它将存储什么类型的对象,所以它应该类似于
List<List<String>> list = new ArrayList<List<String>>()
删除警告
4- List<Integer> list = new List<Integer>()//Compilation error
您不能将List
的对象创建为interface而不是类。
答案 4 :(得分:0)
List
是java.util.collection
包中的界面。
您无法实例化接口。
ArrayList是List接口的具体实现。
ArrayList implements List
答案 5 :(得分:0)
在面向对象编程中,我们能够编写实际上并不存在的东西。 List就是其中之一,它是一个界面。接口实际上并没有对代码执行任何操作,而是充当承诺或合同。
创建列表有很多不同的方法 - 有些在某些应用程序中较慢,有些则更快。最受欢迎的两个是ArrayList和LinkedList。 ArrayList在数组中支持您的列表,支持非常快速的索引 - 您可以非常快速地将对象放在位置n。 LinkedLists在添加新对象和取消它们方面更快(实际上并非如此,原因比这更深一些)。在某些情况下,一个可能更好,而在另一些情况下,另一个可能更好。
因此,如果我创建一个遍历列表并获取每个项目中的数据的方法,那么我不依赖于其中任何一个List实现的特殊功能。我应该选择哪一个?我是否应该强制用户从他的LinkedList创建一个ArrayList,因为我随意决定我会使用它?
列表就是这里的答案。我没有对他们如何创建列表做任何假设,我所做的只是依赖于我知道将在每个列表中的一些方法,所以我不会让用户符合我。但List本身没有任何实例化 - 当你调用new List()时,它是什么意思?嗯,这没有任何意义。
但是,你可以做到
List<String> stringList = new ArrayList<String>()
为什么?我实际执行List,ArrayList时会调用'new'。这不是它的常用用法,但它是允许的,因为那里实际上有一个真正的列表 - 而不仅仅是列表的承诺。