我正在尝试定义一个抽象类,它接受一个事物列表并做一些事情。像这样的东西:
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/