具有此签名的方法构造类的对象,该对象objClass
位于BaseModel
层次结构中的某个位置,并将其添加到具有? extends BaseModel
对象的列表中.
public void constructAndAdd(List extends BaseModel> list, Class objClass) { BaseModel newObject = (BaseModel)objClass.newInstance(); list.add(newObject); }
错误:
The method add(capture#2-of ? extends BaseModel) in the type Listis not applicable for the arguments (BaseModel)
我希望我能做到
? extends BaseModel newObject = (? extends BaseModel)objClass.newInstance();
但那种语法错了.
编译器无法知道?
该类的类型是否相同.
您需要使方法本身通用,以便您可以实际引用该类型:
publicvoid constructAndAdd(List super T> list, Class extends T> objClass) { list.add(objClass.newInstance()); }
一旦你这样做,你根本不需要任何演员阵容.