java - 基于集合的泛型和反射

标签 java generics reflection

这就是我的问题。我有两个类...SingularEntity 和 ListEntity。顾名思义,SingularEntity 代表一个实体,而 ListEntity 代表一个单一实体列表......该列表显然比 SingularEntity 本身具有更多通用属性。所以我有一个 AuthorizationEntity 扩展了 SingularEntity 类

public class SingularEntity{
}

public class AuthorizationEntity extends SingularEntity{

}

现在我有一个 ListEntity,它代表任何单一实体的列表

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;
        }

最佳答案

您应该参数化您的 ListEntity 类

public class ListEntity<T extends SingularEntity>{

  public List<T> data;

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

关于java - 基于集合的泛型和反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17174973/

相关文章:

c# - A-Star (A*) 和通用查找方法

具有访客模式反射的 Java 泛型

java - java中如何获取泛型类的类型?

Java泛型覆盖方法

java - 如何在查询中停止深度连接 hibernate?

java - 在 Spring 5.0 中设置 Spring 的 RestTemplate 的基本 URL/URI

java - GlassFish 服务器 HTTP 状态 404 - 未找到

scala - "generics"在 Scala 中?

c# - IList<IClient> 方法<T>() 其中 T : Iclient can not add client object to list

java - 如何通过传递 Object[] 而不是带反射的参数列表来创建类的新实例