java - LinkedList subList 返回 List 而不是 LinkedList?

标签 java list oop types linked-list

我有一个函数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);

为什么?

最佳答案

subListList 接口(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/

相关文章:

java - 如何在 Hibernate Validator 中检查冲突的注释?

python - 对字典值的操作没有输出

Python - "in"语句搜索对象列表缓慢

python - 如何计算元组列表中的重复项数?

python - 从具有对象属性之一的对象列表中获取索引

php - 构建 'two-way' OO动态ACL系统

java - wowza java cpu使用率高

java - 同步run()方法

java - 将 Coldfusion 查询结果转换为格式化的 javascript 数组

php - 调用扩展类方法问题