如何动态确定列表必须包含

时间:2017-08-28 07:53:35

标签: java list generics reflection

我写了一个泛型方法,但我不知道如何以编程方式告诉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>只确定ListList扩展IModel的对象,我在执行list.add(new Photo())时会收到错误,因为List期待T而我正在添加Photo

我需要的是确定Imodel内的List的子类。

1 个答案:

答案 0 :(得分:0)

你应该使用类似的东西:

public <T extends IModel> List<T> getIModel(Cursor cursor){
    List<T> t = new ArrayList<T>();
    return t;
}

聚苯乙烯。您不需要Class<T> returnClass

并获取列表类型,您可以检查第一个元素:

if(list.size()==0){
  // any type
} else if(if(list.get(0) instanceof Photo){
  // you can insert only the Photo
} else if(...){
  // do some stuff
}