gpt4 book ai didi

java - 如何在抽象父类(super class)中定义泛型列表?

转载 作者:行者123 更新时间:2023-11-29 05:39:20 25 4
gpt4 key购买 nike

我正在尝试创建一个带有抽象方法的抽象类,它应该能够返回任何类型的列表,其中包含扩展 SuperBean 的项目。 .

然后我想创建一个可以将项目添加到该列表的通用类。示例:

class AbstractService<T extends SuperBean> {
//this is what I'm aiming for
void add(T item) {
// "is not applicable for the arguments (T)"
superBean.getSublist().add(item);
}
}

abstract class SuperBean {
abstract List<? extends SuperBean> getSublist();
}

class MyBean1 extends SuperBean {
List<MyBean2> sublist;

List<MyBean2> getSublist() {
return sublist;
}
}

class MyBean2 extends SuperBean {
List<MyBean3> sublist;

List<MyBean3> getSublist() {
return sublist;
}
}

问题:我必须如何定义 abstract getSublist()类,以便我可以添加任何 T item这是 SuperBean 的实现?

最佳答案

您需要在 AbstractService 中添加您的泛型:

//        Add S to be T's type parameter         Add <S> to SuperBean here
class AbstractService<S extends SuperBean, T extends SuperBean<S>> {
// I'm assuming superBean is defined here.
T superBean;

//this is what I'm aiming for
void add(S item) {
superBean.getSublist().add(item);
}
}

接下来,您需要制作 SuperBean泛型,其子类定义了泛型类型参数 <T> :

abstract class SuperBean<T extends SuperBean> {
// Now you can define the abstract method properly:
abstract List<T> getSublist();
}

每个子类都适本地定义了它的泛型类型参数:

class MyBean1 extends SuperBean<MyBean2> {
List<MyBean2> sublist;

List<MyBean2> getSublist() {
return sublist;
}
}

MyBean2定义类似:

class MyBean2 extends SuperBean<MyBean3> {
List<MyBean3> sublist;

List<MyBean3> getSublist() {
return sublist;
}
}

这允许您按如下方式声明服务:

AbstractService<MyBean2, MyBean1> service1 = new AbstractService<MyBean2, MyBean1>();
AbstractService<MyBean3, MyBean2> service2 = new AbstractService<MyBean3, MyBean2>();

关于java - 如何在抽象父类(super class)中定义泛型列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18257159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com