基于收集的泛型与反思

时间:2013-06-18 17:14:06

标签: java generics reflection

所以继承我的问题。我有两个类... 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;
        }

2 个答案:

答案 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>