所以继承我的问题。我有两个类... SingularEntity和ListEntity。顾名思义,SingularEntity表示一个实体,ListEntity表示一个奇异实体列表....该列表显然具有比SingularEntity本身更常见的属性。所以我有一个AuthorizationEntity扩展了SingularEntity类
public class SingularEntity{
}
public class AuthorizationEntity extends SingularEntity{
}
现在我有一个ListEntity表示任何SingularEntities的列表
public class ListEntity{
public List<? extends SingularEntity> data;
public ListEntity(List<? extends SingularEntity> data){
this.data = data;
}
}
现在,我想使用反射来总是填充列表....我总是在results.add方法中遇到错误。说方法List.add(CAP#1)不适用。任何帮助都很高兴
public List<? extends SingularEntity> build() {
List<? extends SingularEntity> results = new ArrayList<SingularEntity>();
try {
Constructor javaBeanClassConstructor =
(Constructor) DTOClass.getDeclaredConstructors()[0];
Class<?>[] constructorParameterTypes =
javaBeanClassConstructor.getParameterTypes();
for (Object[] columns : lstInput) {
Object[] constructorArgs = new Object[constructorParameterTypes.length];
for (int j = 0; j < columns.length; j++) {
Object columnValue = columns[j];
Class<?> parameterType = constructorParameterTypes[j];
// convert the column value to the correct type--if possible
constructorArgs[j] = ConversionManager.getDefaultManager()
.convertObject(columnValue, parameterType);
}
*results.add(javaBeanClassConstructor.newInstance(constructorArgs));*
}
}catch(Exception ex){
}
return results;
}
答案 0 :(得分:5)
您应该参数化ListEntity类
public class ListEntity<T extends SingularEntity>{
public List<T> data;
public ListEntity(List<T> data){
this.data = data;
}
}
答案 1 :(得分:0)
此处的问题是您已定义List<? extends SingularEntity>
,因此无法添加到此List
。为什么不?因为对于编译器,此List
可以是任何扩展SingularEntity
,例如新的MultipleEntity
类。 Java不允许您向SingularEntity
的任何可能子类的任何List
添加任意SingularEntity
。
要添加到List
,只需使用List<SingularEntity>
。