投射通用列表

时间:2012-10-03 21:02:25

标签: java list generics instantiation

List<Integer> list0 = new List1<Integer>();

a)“List”这个词在java中是一个关键词吗?

b)创建对象时,两侧的类名不应该相同吗?例如:

Point x = new Point(1,2)

c)以下代码是什么意思?

List<Integer> list0 = new List1<Integer>();

6 个答案:

答案 0 :(得分:8)

a)不,不是,它是Interface

b)并非总是如此。右侧的类型必须与分配的类型兼容 - 它必须相同或者是子类型。在这种情况下,List1必须实现List接口。

c)创建一个新的List1实例来保存整数(“整数”是错误的 - 它必须是“整数”);如果List1类实现List接口,则这是合法的。 <Integer>generic type,用于限制集合(List)可以容纳的类型。

答案 1 :(得分:3)

List1必须在某处声明为

public class List1<T> implements List<T> {
...

List是一个接口,因此实现 List的任何类的对象都可以分配给List类型的变量。

答案 2 :(得分:2)

0)否。List是接口的名称。请参阅:http://docs.oracle.com/javase/6/docs/api/java/util/List.html

1)编号java具有Polimorphism,因此您可以通过一个已实现的接口或扩展类的名称来调用对象

答案 3 :(得分:1)

List是java中的一个接口,您可能希望将其实例化为ArrayList。

List list0 = new ArrayList();

答案 4 :(得分:0)

  • 甲。 List是Java中的一个接口。
  • B中。左侧不能是右侧对象扩展或实现的任何超类或接口。看看'按合同设计'
  • ℃。也许你的意思是

    列表l = new ArrayList&lt;&gt;();

这是一个只能包含整数类型的列表

答案 5 :(得分:0)

List不是关键字,它是一种类型,特别是Java接口。您的示例中的代码无法编译(除非List1类定义为:class List1 implements List { ... }),但是这样的内容会:

List<Integer> ls = new ArrayList<Integer>();

这会创建一个可以容纳ArrayList的{​​{1}},并将其引用分配给变量Integers,该变量被声明为ls类型。 List<Integer>可能会引用不同类型的列表,例如ls,但您可以保证LinkedList确实指向某种列表(除非它为空),因此您可以使用ls界面中指定的方法。

变量的类型不需要与赋值右侧的对象类型相同(尽管通常是这样),但对象必须是相同类型或子类/实现变量类型。由于所有对象都扩展为List,因此您可以执行以下操作:

Object

尽管如上所述,Object obj = new ArrayList<Integer>(); 中您可以访问的唯一方法是Object中定义的内容,即使引用的对象实际上是obj