首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LinkedList subList返回List而不是LinkedList?

LinkedList subList返回List而不是LinkedList?
EN

Stack Overflow用户
提问于 2013-04-18 02:56:31
回答 5查看 3.7K关注 0票数 2

我有一个函数f,它获取LinkedList的子列表并将其传递给g,后者也接受一个LinkedList

代码语言:javascript
复制
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。因此,我必须将其更改为:

代码语言:javascript
复制
LinkedList<T> l2 = (LinkedList<T>)l.subList(i,j);

为什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-18 03:02:06

subListList接口中定义,并返回一个List。如果您检查LinkedList中的实现,它实际上位于一个父类(AbstractList)中,您将看到它不返回LinkedList而是返回SubList,您的强制转换将抛出异常。

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

代码语言:javascript
复制
public static <T> void g(List<T> l) {
票数 5
EN

Stack Overflow用户

发布于 2013-04-18 03:02:23

如果g()不使用LinkedList的方法,但只有List接口更好地定义g(),如下所示:

代码语言:javascript
复制
public static <T> void g( List<T> l ) {
}

主线变成了:

代码语言:javascript
复制
public static <T> void f() {
    List<T> l = new LinkedList<T>();
    ...
    List<T> l2 = l.subList(i,j);
    ...
    g(l2);
}

作为一个理由,please consult this post

票数 0
EN

Stack Overflow用户

发布于 2013-04-18 03:04:46

方法sublist是在由LinkedList实现的List接口中声明的。List接口中sublist方法的签名为:

代码语言:javascript
复制
 List<E> subList(int fromIndex, int toIndex)

因此,当您从LinkedList类调用此方法时,对象将为LinkedList,但该方法的返回类型为List,因此它将以List的形式给出。但是,您可以将变量强制转换为LinkedList并使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16067933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档