kra*_*ato 1 java collections linked-list list
有什么区别
LinkedList<String> l1 = new LinkedList<String>();
List<String> l2 = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)
为什么l2类型没有方法addFirst而
l1类型有方法addFirst?即使他们都抱着一个LinkedList对象?与我从Gosling的"Java编程语言"中读到的相反,该语言指出对象将是你所创造的,在这种情况下LinkedList,new LinkedList()即使它是List类型,我也是如此.
那我该如何正确申报呢?
Collection<String> c = new LinkedList<String>();
List<String> c = new LinkedList<String>();
LinkedList<String> c = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)
为什么l2类型没有方法addFirst而l1类型有方法addFirst?
因为编译时类型l2只是List<E>,并List<E>没有声明addFirst方法.
作为一个更简单的例子,考虑:
Object x = "hello";
int invalid = x.length(); // This is invalid
Run Code Online (Sandbox Code Playgroud)
在执行时,x会引用一个String对象,但变量本身的类型只是Object,所以你不能调用该String.length()方法.
在此区分三个不同的术语非常重要:
变量的值(假设它不是原始变量)是一个参考.该引用可以是null,或者它可以引用与变量类型分配兼容的类型的对象.
所以在上面的例子中:
x是Objectx是参考String执行时类型的对象