具有泛型列表的 Java 抽象类

标签 java generics abstract

我正在尝试定义一个抽象类,它接受一个事物列表并做一些事情。像这样的东西:

abstract public class AbstractClass {
    private final List<?> list;

    public AbstractClass(List<?> list) {
        this.list = list;
    }

    public List<?> getList() { return list; }
    abstract void addToList(List<?> list);
}

public class Class1 extends AbstractClass {
    public Class1(List<Integer> list) {
        super(list);
    }

    @Override
    void addToList(List<Integer> list) {
        // do stuff
    }
}

public class Class2 extends AbstractClass {
    public Class2(List<String> list) {
        super(list);
    }

    @Override
    void addToList(List<String> list) {
        // do stuff
    }
}


List<Integer> a = new List<Integer>();
Class1 c1 = new Class1(a);
List<Integer> b = c1.getList();
c1.addToList(a);

List<String> c = new List<String>();
Class2 c2 = new Class2(c);
List<Integer> d = c2.getList();
c2.addToList(c);

在子类中使用具有特定类型的 addToList 会产生错误,但我不知道这是语法问题(我对泛型的了解不足)还是我想做的事情本身(是否可以重载这样的抽象方法)?

最佳答案

你应该制作AbstractClass a typed class而不是使用 ? 通配符。

abstract public class AbstractClass<T> {
    private final List<T> list;

    public AbstractClass(List<T> list) {
        this.list = list;
    }

    public List<T> getList() { return list; }
    abstract void addToList(List<T> list);
}

在这种情况下,您将拥有

public class Class1 extends AbstractClass<Integer> { ... }
public class Class2 extends AbstractClass<String> { ... }

关于具有泛型列表的 Java 抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35049076/

相关文章:

java - 如何在子类中使用泛型来限制方法参数类型?

具有通用结构的 C# 类设计

java - 为什么以下代码会自动装箱为错误的类型并进行编译?

java - Java EE 数据源上连接的上下文特定用户名 (JBoss 5.1)

java - 有没有办法在 Chrome 或 Firefox 中修改 HTTP 请求?

java - 在方法 CompareTo(E) 中找不到符号

java - 关于创建构造函数,我的代码有什么问题?

c# - Microsoft Fakes 是否支持 shim 上的抽象方法?

c++ - 如果不是抽象则调用基类方法

c# - 接口(interface)和抽象类中的 Xml 属性