我们假设我有一个可以扩展的A类。在A类中,我有一个列表List<A>
。所以这个类将包含一个包含元素A的列表。现在如果我继承这个类B扩展A,我希望类B具有相同的成员List<B>
,即相同的列表,但这个类型包含类型B的项目。这可能使用泛型?我可以看到类似A <T extends A>
的内容,同时声明List<T>
,但我不喜欢,因为有关类类型的信息已经存在。还有其他更好的解决方案吗示例如下:
public class A {
List<A> list = new ArrayList<A>();
}
public class B extends A {
}
我希望列表在B类中具有泛型类型。
答案 0 :(得分:2)
如果你想把行为放在超类中,那么你将不得不告诉超类子类是什么类型的类。这可以通过向超级添加泛型类型来完成。
public class A<E> {
protected List<E> items;
public A() {
this.items = new ArrayList<E>();
}
}
public class B extends A<B> {
public static void main(String[] args) {
B b = new B();
b.items.add(b);
}
}
答案 1 :(得分:0)
您可以在通用中使用extends
关键字。
例如:
public class A {
protected List<? extends A> list;
public A() {
list = new ArrayList<A>();
}
public <T extends A> List<T> getList() {
return (List<T>) list;
}
public void setList(List<A> list) {
this.list = list;
}
}
public class B extends A {
public B() {
list = new ArrayList<B>();
}
public static void main(String[] args) {
A a = new A();
a.getList().add(new A());
B b = new B();
b.getList().add(new B());
}
}