Java 从类名创建列表或按列表强制转换

Java 从类名创建列表或按列表强制转换,java,list,generics,Java,List,Generics,我有一个泛型类,我想创建一个列表或由列表强制转换。我只有班级类型。我想得到的是: public class CustomerDao extends BaseDao<Customer> implements ICustomerDao { private Class<Customer> entityClass; public CustomerDao(Class<Customer> entityClass) { super(ent

我有一个泛型类,我想创建一个
列表
或由
列表
强制转换。我只有班级类型。我想得到的是:

public class CustomerDao extends BaseDao<Customer> implements ICustomerDao {

    private Class<Customer> entityClass;

    public CustomerDao(Class<Customer> entityClass) {
        super(entityClass);
        this.entityClass = entityClass;
    }

    public void getCustomers() {
        List<***> list = (List<***>)getSessionFactory().getCurrentSession().createCriteria(entityClass).list();
    }
}
公共类CustomerDao扩展BaseDao实现ICCustomerDao{
私有类实体类;
公共客户道(类entityClass){
超级(实体类);
this.entityClass=entityClass;
}
公众客户(){
列表列表=(列表)getSessionFactory().getCurrentSession().createCriteria(entityClass.List();
}
}
现在如何使用字段
entityClass
创建
列表
?可能吗


我可以使用
List List=getSessionFactory().getCurrentSession().createCriteria(entityClass.List(),但我想以不同的方式学习。

那将毫无意义。
泛型只在编译时存在


相反,您应该使整个类成为通用类。

这将毫无意义。
泛型只在编译时存在


相反,您应该使整个类成为泛型的。

似乎您正在尝试实现一个特定于类型的DAO(对于您的客户实体),该DAO派生自一个抽象的泛型基本DAO。如果这确实是您想要实现的,那么根本不需要泛型:

public class CustomerDao extends BaseDao<Customer> implements ICustomerDao {

    public CustomerDao() {
        super(Customer.class);
    }

    public List<Customer> getCustomers() {
        final List<Customer> list = (List<Customer>) getSessionFactory().
            getCurrentSession()
           .createCriteria(Customer.class).list();
    }
}
公共类CustomerDao扩展BaseDao实现ICCustomerDao{
公共客户道(){
超级(Customer.class);
}
公共列表getCustomers(){
最终列表列表=(列表)getSessionFactory()。
getCurrentSession()
.createCriteria(Customer.class).list();
}
}

我已经有一段时间没有使用Hibernate API了,但是我认为您也不需要类型转换来列出

似乎您正在尝试实现一个特定于类型的DAO(针对您的客户实体),它派生自一个抽象的、通用的基本DAO。如果这确实是您想要实现的,那么根本不需要泛型:

public class CustomerDao extends BaseDao<Customer> implements ICustomerDao {

    public CustomerDao() {
        super(Customer.class);
    }

    public List<Customer> getCustomers() {
        final List<Customer> list = (List<Customer>) getSessionFactory().
            getCurrentSession()
           .createCriteria(Customer.class).list();
    }
}
公共类CustomerDao扩展BaseDao实现ICCustomerDao{
公共客户道(){
超级(Customer.class);
}
公共列表getCustomers(){
最终列表列表=(列表)getSessionFactory()。
getCurrentSession()
.createCriteria(Customer.class).list();
}
}

我已经有一段时间没有使用Hibernate API了,但是我认为您也不需要将类型转换到
列表

您所说的“由
列表
转换”是什么意思?@JonSkeet我已经更新了我的代码,在那里您可以找到由
列表
转换的类型。当您不知道类型时,为什么要转换到(而不是通过)
列表
?你只是在声明一个局部变量。。。那你会怎么处理它?另一种方式?你的意思是你想手动完成你可以通过使用泛型实现的事情吗?另外,只是一个注释,
getCustomers()
是否打算无效?@JonSkeet在代码中它似乎是局部变量,而且我只能返回
List
而不返回任何类型。这应该行得通。我愿意知道这是否可行。你说的“演员名单”是什么意思?@JonSkeet我已经更新了我的代码,在那里你可以找到演员名单。你不知道类型,为什么要(而不是)演员名单?你只是在声明一个局部变量。。。那你会怎么处理它?另一种方式?你的意思是你想手动完成你可以通过使用泛型实现的事情吗?另外,只是一个注释,
getCustomers()
是否打算无效?@JonSkeet在代码中它似乎是局部变量,而且我只能返回
List
而不返回任何类型。这应该行得通。我愿意知道这是否可行。或者,使整个类特定于他的泛型参数类型(
Customer
)。或者,使整个类特定于他的泛型参数类型(
Customer
)。