不兼容的类型:ArrayList<Link>无法转换为Links<Link>

问题描述 投票:0回答:1

我正在尝试实例化一个抽象类,但它不起作用。

abstract class Links<T> implements List<T>{
    
}

Links<Link> notVisitedLinks = new ArrayList<Link>();

我还测试了 Links 类不是抽象类,它告诉我以下错误消息:

Links 不是抽象类,它不会重写 List 中的抽象方法 subList(int, int)

class Links<T> implements List<T>{
    
}

Links<Link> notVisitedLinks = new ArrayList<Link>();

我尝试了解如何重写 subList 方法,但没有成功。

java interface abstract-class
1个回答
0
投票

您收到错误,因为 ArrayList 与链接不匹配。尽管 ArrayList 适合 List,但它与 Links 并不完全相同,尽管 Links 扩展了 List。

一个修复可能是创建一个常规类来扩展链接并添加所需的方法。像这样:

import java.util.ArrayList;
import java.util.List;

abstract class Links<T> implements List<T> {

}

class ConcreteLinks<T> extends Links<T> {
    private List<T> list = new ArrayList<>();

    @Override
    public int size() {
        return list.size();
    }

    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }

    // Add the other methods from the List interface here

    @Override
    public T get(int index) {
        return list.get(index);
    }

    @Override
    public T set(int index, T element) {
        return list.set(index, element);
    }

    // Add the other methods from the List interface here

    @Override
    public void add(int index, T element) {
        list.add(index, element);
    }

    @Override
    public T remove(int index) {
        return list.remove(index);
    }

    // Add the other methods from the List interface here
}

public class Main {
    public static void main(String[] args) {
        ConcreteLinks<Link> notVisitedLinks = new ConcreteLinks<>();
        notVisitedLinks.add(new Link());
        // Now you can use notVisitedLinks as a list of Link objects
    }
}

在此代码中:

ConcreteLinks 是一个常规类,它扩展了 Links 并填充了 List 接口所需的方法。 notVisitedLinks 是 ConcreteLinks 的一个实例,因此您可以将其视为 Link 对象的列表。

© www.soinside.com 2019 - 2024. All rights reserved.