LinkedList子列表返回List而不是LinkedList?

Dog*_*Dog 2 java oop types linked-list list

我有一个函数f获取a的子列表LinkedList并将其传递给g,这也需要LinkedList:

public static <T> void g(LinkedList<T> l) {
}

public static <T> void f() {
    LinkedList<T> l = new LinkedList<T>();
    ...
    LinkedList<T> l2 = l.subList(i,j);
    ...
    g(l2);
}
Run Code Online (Sandbox Code Playgroud)

但这不会编译,因为显然LinkedList.subList返回List而不是LinkedList.所以我必须改为:

LinkedList<T> l2 = (LinkedList<T>)l.subList(i,j);
Run Code Online (Sandbox Code Playgroud)

为什么?

ass*_*ias 5

subListList接口中定义并返回一个List.如果你检查在执行LinkedList,这实际上是在父类中的一个(AbstractList),你会看到,它并没有返回LinkedList而是SubList和你的施法会抛出异常.

除非您使用特定方法LinkedList,否则解决此问题的最简单方法是更改g为:

public static <T> void g(List<T> l) {
Run Code Online (Sandbox Code Playgroud)