用于创建新对象列表的多态方法

时间:2014-01-13 09:42:17

标签: java object

编写给定类型T和整数n的方法的最佳方法是什么,返回n个新创建的类型为T的对象的列表。是否可以将构造函数作为参数传递或者我必须在其他方式?

想到这样的事情

public <T> ArrayList<Object> generate(T type, int amount){
    ArrayList<Object> objects = new ArrayList();
    for (int i = 0; i < amount; i ++){
        objects.add(new bla bla)...

}

2 个答案:

答案 0 :(得分:2)

使用通用方法。

public <T> List<T> getList(Class<T> clazz, int size) throws InstantiationException, IllegalAccessException{
    List<T> list = new ArrayList<T>();
    for(int x = 0; x < size; x++){
        list.add(clazz.newInstance());
    }
    return list;
}

注意:这仅适用于具有默认构造函数的对象。如果要创建不包含默认构造函数的List个对象,则必须使用反射来选择适当的构造函数。

答案 1 :(得分:0)

public static <T> List<T> generate(Class<T> clazz, int amount) {
   ArrayList<Object> objects = new ArrayList();
   for (int i = 0; i < amount; i ++){
      objects.add(clazz.newInstance());
   }
   return list;
}

上面的代码实际上尝试使用默认构造函数。如果需要,可以将反射引用传递给您选择的相应构造函数。可以通过调用Class.getConstructors()来获取构造函数列表。

然后你的代码看起来像这样:

public static <T> List<T> generate(Constructor<T> constructor, int amount) {
   ArrayList<Object> objects = new ArrayList();
   for (int i = 0; i < amount; i ++){
      objects.add(constructor.newInstance(param1, param2, ...)); // fill the arguments 
   }
   return list;
}