List<Integer> list0 = new List1<Integer>();
a)“List”这个词是java中的关键字吗?
b) 创建对象时,类名不应该两边都一样吗?例如:
Point x = new Point(1,2)
c) 下面的代码是什么意思?
List<Integer> list0 = new List1<Integer>();
List<Integer> list0 = new List1<Integer>();
a)“List”这个词是java中的关键字吗?
b) 创建对象时,类名不应该两边都一样吗?例如:
Point x = new Point(1,2)
c) 下面的代码是什么意思?
List<Integer> list0 = new List1<Integer>();
a) 不,它不是,它是一个Interface
b) 并非总是如此。右侧的类型必须与被分配的类型兼容 - 它必须相同,或者是子类型。在这种情况下List1
必须实现List
接口。
c)创建一个新List1
实例来保存整数(“整数”是错误的 - 它必须是“整数”);List1
仅当类实现了List
接口时,这才是合法的。<Integer>
是一个泛型类型,它限制了集合(List)可以持有的类型。
List1
必须在某处声明为
public class List1<T> implements List<T> {
...
List
是一个接口,因此任何实现 List
类的对象都可以分配给类型为 的变量List
。
0) No.List
是接口的名称。请参阅:http ://docs.oracle.com/javase/6/docs/api/java/util/List.html
1)不,java有多态,所以你可以通过一个实现的接口或扩展类的名称来调用一个对象
List 是 java 中的一个接口,您可能希望将其实例化为 ArrayList。
List list0 = new ArrayList();
C. 也许你的意思是
列表 l = new ArrayList<>();
这是一个只能包含 Integer 类型的列表
List不是关键字,它是一种类型,特别是 Java 接口。您的示例中的代码无法编译(除非List1
该类被定义为:)class List1 implements List { ... }
,但是这样的事情会:
List<Integer> ls = new ArrayList<Integer>();
这将创建一个ArrayList
可以容纳的对象Integers
,并将对它的引用分配给ls
声明为类型的变量List<Integer>
。 ls
可能持有对不同类型列表的引用,例如 a LinkedList
,但您可以保证它ls
确实指向某种列表(除非它为空),因此您可以使用List
接口中指定的方法。
变量的类型不需要与赋值右侧的对象的类型相同(尽管经常如此),但对象必须是相同的类型,或者是变量的子类/实现类型。由于所有对象都扩展Object
,您始终可以执行以下操作:
Object obj = new ArrayList<Integer>();
虽然,像上面一样,您可以访问的唯一方法obj
是在 中定义的Object
,即使被引用的对象实际上是一个ArrayList
.