【发布时间】:2018-02-05 10:35:20
【问题描述】:
我写了一个通用方法,但我不知道如何以编程方式告诉List 它必须包含的对象类型。
我读到我不知道<T> 对象类,所以我在方法中添加了另一个参数(returnClass)。
public <T extends IModel> List<T> getIModel(Cursor cursor, Class<T> returnClass){
//returnClass is the class that List must contains.
//I need something like this
List<returnClass.getClass()> list = new ArrayList<>();
list.add(new Photo());
}
这些是我的“模型”类
public class Media implements IModel{}
public class Photo extends Media{}
我不能这样做:
List<T> list = new ArrayList<>();
list.add(new Photo());
因为List<T> 确定List 是扩展IModel 的对象的List,所以在执行list.add(new Photo()) 时会出错,因为List 期待T 和I' m 添加Photo。
我需要确定Imodel 的子类放在List 中。
【问题讨论】:
-
列表
列表; -
没有。因为我不能做 list.add(subclass)。 List
仅确定 List 是扩展 IModel 的对象列表。我需要的是确定 Imodel 的子类放在 List 中 -
你必须像
list.add((T)(new Photo())一样投射。顺便说一句,这是糟糕的代码;尝试重新思考您的设计。 -
我编辑了我的帖子以便更好地解释
-
你如何调用你的
getIModel()方法?例如。List<Photo> photos = getIModel(cursor, Photo.class);和其他地方List<Audio> audios = getIModel(cursor, Audio.class);?当然,对于第二种用法,在方法中使用list.add(new Photo());是非法的,这就是编译器所抱怨的。
标签: java list generics reflection