したがって、私があなたを正しく理解している場合は、特定のオブジェクトが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;
}
残念ながら、returnタイプはどちらのタイプも許可する必要があります(代わりに、異なるreturnタイプで2つのメソッドを作成できますが、それらは異なる名前である必要があります)。ただし、これにより、listAとlistBをより一般的なリストに割り当てる前に、それらを独自のタイプとして使用できます。
ただし、これはSOLIDプリンシパルの違反であるため、代替手段は次のようになります。
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;
}
}
お役に立てば幸いです。