2013-06-18 129 views
0

所以继承人我的问题。我有两个类... SingularEntity和ListEntity。顾名思义,SingularEntity代表一个实体,而一个ListEntity代表一个单一实体列表....该列表明显具有比SingularEntity本身更为常见的属性。所以,我有它扩展了SingularEntity类基于集合的泛型和反射

public class SingularEntity{ 
} 

public class AuthorizationEntity extends SingularEntity{ 

} 

现在我代表任何SingularEntities

public class ListEntity{ 

    public List<? extends SingularEntity> data; 

    public ListEntity(List<? extends SingularEntity> data){ 
     this.data = data; 
    } 
} 

的名单现在,单个ListEntity,我想使用反射来始终填充列表的AuthorizationEntity。 ...并且我总是在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

'javaBeanClassConstructor.newInstance(constructorArgs)'正在返回什么类型? – sanbhat

回答

5

你应该参数的ListEntity类

public class ListEntity<T extends SingularEntity>{ 

    public List<T> data; 

    public ListEntity(List<T> data){ 
    this.data = data; 
    } 
} 
+0

谢谢大家...非常感谢....所以现在的编译在罚款安全类型后....但调用的方法列表 authData = DTOBuilder.newBuilder()。DTOClassNameCalled(AuthorizationDTO.class) .InputListCalled(lstObject).build(); – user2214717

0

这里的问题是,你已经定义了一个List<? extends SingularEntity>,所以你不能添加到此List。为什么不?因为编译器,这List可能是任何东西延伸SingularEntity,说一个新的MultipleEntity类。 Java不允许您将任何SingularEntity添加到SingularEntity的任何可能子类的任何List

要添加到List,只需使用List<SingularEntity>