我有一个函数f
,它获取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);
}
但这无法编译,因为显然 LinkedList.subList
返回 List
而不是 LinkedList
。所以我必须将其更改为:
LinkedList<T> l2 = (LinkedList<T>)l.subList(i,j);
为什么?
最佳答案
subList
在List
接口(interface)中定义并返回一个List
。如果您检查 LinkedList
中的实现,它实际上位于父类之一 (AbstractList
) 中,您会发现它不返回一个 LinkedList
但返回一个 SubList
并且您的转换将抛出异常。
除非您使用特定于 LinkedList
的方法,否则解决此问题的最简单方法是将 g
更改为:
public static <T> void g(List<T> l) {
关于java - LinkedList subList 返回 List 而不是 LinkedList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16067933/