如何基于实例化对象

时间:2011-05-18 04:54:56

标签: java list generics

我想基于列表的类型(即Truck)实例化一个对象并添加到列表中,我尝试下面的内容,但它警告我“sun.reflect.generics.reflectiveObjects.TypeVariableImpl与java不兼容.lang.Class“

public <T extends Car> void addRow(List<T> list) {
Class<T> clazz = (Class<T>) ((ParameterizedType) list.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
T newInstance = clazz.newInstance();
list.add(newInstance);
}

方法调用:

List<Truck> abc = new ArrayList<Truck>;
addRow(abc);

任何帮助?一切都提前了!

2 个答案:

答案 0 :(得分:7)

由于类型擦除,您无法执行此操作。例如,请参阅this threadthis thread。您可以做的最好的是工厂类或将Class实例作为单独的参数传递:

addRow(abc, Truck.class);

有关类型擦除的更多信息,请here

答案 1 :(得分:0)

或者如果您正在创建所有类型,您可以创建一个类似于clone()的方法,但它会创建默认实例并覆盖所有类中的方法。