我想基于列表的类型(即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);
任何帮助?一切都提前了!
答案 0 :(得分:7)
由于类型擦除,您无法执行此操作。例如,请参阅this thread或this thread。您可以做的最好的是工厂类或将Class实例作为单独的参数传递:
addRow(abc, Truck.class);
有关类型擦除的更多信息,请here。
答案 1 :(得分:0)
或者如果您正在创建所有类型,您可以创建一个类似于clone()的方法,但它会创建默认实例并覆盖所有类中的方法。