在java中生成动态类型的数组列表

时间:2014-12-04 19:41:52

标签: java

我所拥有的是超级课程

class Geometry{
}

和两个扩展它的类:

class ShapeOne extends Geometry{}

class ShapeTwo extends Geometry{}

我想要实现的是生成类型ShapeOneShapeTwo或任何其他Geometry实例的对象的列表(从数据库中读取),但是动态将类型作为参数传递, 比如:

public ArrayList< Geometry Object > getList(/**passing typeof generated list**/){
  // getting data from Database;
  return new ArrayList<typeof generated list>();
}

so the call would be then like:
 getList(ShapeTwo);

感谢您的帮助:))

2 个答案:

答案 0 :(得分:3)

你做不到。由于type erasureList<Geometry>不是List<ShapeOne>的超类。这里有更好的解释:Is List<Dog> a subclass of List<Animal>? Why aren't Java's generics implicitly polymorphic?

解决问题的一些替代方案:

  • 返回List<ShapeOne>List<ShapeTwo>List<TheExpectedClass>而不是List<Geometry>
  • 返回<T extends Geometry> List<T>并传递Class<T> clazz作为参数。可能您需要使用其他参数来识别从数据库恢复的数据是否属于Geometry的特定子类。

答案 1 :(得分:3)

您可以通过Class<T>传递,如下所示:

public <T extends GeometryObject> List<T> getList(Class<T> itemClass) throws Exception {
    List<T> res = new ArrayList<T>();
    for (int i = 0 ; i != 10 ; i++) {
        res.add(itemClass.newInstance());
    }
    return res;
}

Demo.

注意:上面对newInstance的调用假设该类具有无参数构造函数。