我有一个扩展基类类列表
public class Entity{
abstract String getTitle();
}
类的孩子
public class ChildEntityOne extends Entity{
public static final String TITLE= "ABCD";
@Override
public String getTitle() {
return TITLE;;
}
}
public class ChildEntityTwo extends Entity{
public static final String TITLE= "EFGH";
@Override
public String getTitle() {
return TITLE;;
}
}
public class ChildEntityThree extends Entity{
public static final String TITLE= "WXYZ";
@Override
public String getTitle() {
return TITLE;;
}
}
现在我尝试将一个有效类列表传递给一个函数,该函数从类列表中的一个创建一个实例并返回它
List<?ClassesToChooseFrom?> list = new ArrayList()<>;
list.add(?ChildEntityOne?);
list.add(?ChildEntityTwo?);
Entity result = getInstantiatedClass(list,getKey(),getjsonData())
if(result instanceof ChildEntityOne){
//do something
}else if(result instanceof ChildEntityTwo){
//do somwthing
}
public ?InstantiatedClassObject? getInstantiatedClass(List<?ClassesToChooseFrom?> list,String key,String jsonData){
foreach(?Class? itemclass : list){
if(itemClass.getTitle().equals(key)){
return new GsonBuilder().create().fromJson(jsonData, itemClass);}
}
return null;
}
我试过List<;Class<;? 扩展实体>>>; 类=新数组列表();
但不能走得更远。
开头是对的:Entity的子类列表是:
List<Class<? extends Entity>> list = new ArrayList<>();
list.add(ChildEntityOne.class);
list.add(ChildEntityTwo.class);
然后您只需要使GetInstantiatedClass
使用您传递给它的相同类型:
public Entity getInstantiatedClass(List<Class<? extends Entity>> list, String key, String jsonData) {
for (Class<? extends Entity> itemclass : list) {
...
如果您不想/不需要为实体类做任何特殊的事情,那么可以使它成为通用的。
public <T> T getInstantiatedClass(List<Class<? extends T>> list, String key, String jsonData) {
for (Class<? extends T> itemclass : list) {
...