2011-05-18 91 views
0

我想基於列表的類型(即卡車)實例化一個對象並添加到列表中,我嘗試了下面的一些內容,但它警告我用「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); 

任何幫助嗎?提前一切!

回答

7

由於類型擦除,你不能這樣做。參見,例如,this threadthis thread。你能做的最好的或者是一個工廠類或類實例傳遞作爲一個單獨的參數:在類型擦除

addRow(abc, Truck.class); 

更多信息,可以發現here

0

或者如果你製作了所有的類型,你可以創建一個類似於clone()的方法,但是它使默認實例和重寫所有類中的方法。