因此,如果我对您的理解正确,您希望能够根据给定对象是 ClassA 还是 ClassB 来构造 ClassA 列表或 ClassB 列表。
public List<? extends Object> getList(Object e) {
List<? extends Object> list = new ArrayList<? extends Object>();
if(e instanceof ClassA) {
List<ClassA> listA = new ArrayList<ClassA>();
// Populate list somehow
list = listA;
} else if (e instanceof ClassB) {
List<ClassB> listB = new ArrayList<ClassB>();
// Populate list somehow
list = listB;
}
return list;
}
不幸的是,返回类型必须允许任何一种类型(您也可以创建两个具有不同返回类型的方法,但它们必须具有不同的名称)。但是,这允许您在将 listA 和 listB 分配给更通用的列表之前将其用作它们自己的类型。
但是,这违反了SOLID principal,因此替代方案可能是:
public abstract class Root<T> {
public abstract List<T> getList();
}
public class ClassAList extends Root<ClassA> {
@Override
public List<ClassA> getList() {
List<ClassA> list = new ArrayList<ClassA>();
// Populate list somehow
return list;
}
}
public class ClassBList extends Root<ClassB> {
@Override
public List<ClassB> getList() {
List<ClassB> list = new ArrayList<ClassB>();
// Populate list somehow
return list;
}
}
希望有帮助!