简体   繁体   English

具有通用列表的Java抽象类

[英]Java abstract class with generic lists

I'm trying to define an abstract class that takes in a List of things and does stuff. 我正在尝试定义一个抽象类,该抽象类接受事物列表并进行处理。 Something like: 就像是:

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);

Having addToList with specific types in the subclasses is generating errors, but I don't know if that's a matter of syntax (with my poor knowledge of generics) or what I'm trying to do itself (is it possible to overload an abstract method like that)? 在子类中使用具有特定类型的addToList会产生错误,但是我不知道这是语法问题(由于我对泛型的了解不足)还是我自己想做的事情(是否有可能重载抽象方法像那样)?

You should make AbstractClass a typed class instead of using the ? 您应该使AbstractClass 成为类型化的类,而不是使用? wildcard. 通配符。

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);
}

In this case, you would have 在这种情况下,

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM