Java 如何将某个泛型类型动态分配给列表?

Java 如何将某个泛型类型动态分配给列表?,java,jakarta-ee,generics,Java,Jakarta Ee,Generics,这个问题的标题感觉很笨拙。感谢您的编辑。 我正在尝试创建一个可重用的查询,以返回由指定的字符串指定的某类对象的列表。 这是行不通的,但我想这会让我明白我在做什么: public List<?> getAll(String type) { Class clazz = Class.forName(type); return (List<clazz>) em.createQuery("SELECT t from " + type + " t").getResul

这个问题的标题感觉很笨拙。感谢您的编辑。
我正在尝试创建一个可重用的查询,以返回由指定的
字符串指定的某类对象的
列表

这是行不通的,但我想这会让我明白我在做什么:

public List<?> getAll(String type) {
    Class clazz = Class.forName(type);
    return (List<clazz>) em.createQuery("SELECT t from " + type + " t").getResultList();
}
public List getAll(字符串类型){
clazz类=Class.forName(类型);
return(List)em.createQuery(“从”+type+“t”中选择t”).getResultList();
}

尝试使用类型的类:

public <T> List<T> getAll(Class<T> type) {
  return em.createQuery("SELECT t from " + type.getSimpleName() + " t").getResultList();
}
如果只是为了查询,您可能也不需要获取类对象本身(但是,首先检查字符串是否是现有类的名称可能是有意义的)。在这种情况下,您的方法可能如下所示:

List<?> l = getAll( Class.forName( typeName ));
public List<?> getAll(String type) {
   return em.createQuery("SELECT t from " + type + " t").getResultList();
}
public List getAll(字符串类型){
返回em.createQuery(“从“+type+”t”中选择t”).getResultList();
}
此变体还允许您传入完全限定的类名或实体名,也就是说,它会更灵活一些

或者,您可以返回
列表
,这将允许您向列表中添加更多对象(但请注意,您可以添加任何内容)


也就是说,我会尽可能使用第一个选项,当具体类型(或至少某些接口)在编译时未知时,使用第二个选项作为备用选项。

尝试使用类型的类:

public <T> List<T> getAll(Class<T> type) {
  return em.createQuery("SELECT t from " + type.getSimpleName() + " t").getResultList();
}
如果只是为了查询,您可能也不需要获取类对象本身(但是,首先检查字符串是否是现有类的名称可能是有意义的)。在这种情况下,您的方法可能如下所示:

List<?> l = getAll( Class.forName( typeName ));
public List<?> getAll(String type) {
   return em.createQuery("SELECT t from " + type + " t").getResultList();
}
public List getAll(字符串类型){
返回em.createQuery(“从“+type+”t”中选择t”).getResultList();
}
此变体还允许您传入完全限定的类名或实体名,也就是说,它会更灵活一些

或者,您可以返回
列表
,这将允许您向列表中添加更多对象(但请注意,您可以添加任何内容)


也就是说,只要有可能,我会使用第一个选项,当具体类型(或至少某些接口)出现问题时,我会使用第二个选项作为后备选项在编译时未知。

为什么不使用没有泛型的简单列表?我认为这是不可能的,因为类型擦除。您是否需要列表之类的东西来放置从数据库获取的数据,或者您正在尝试使用的类似东西。为什么不使用没有泛型的简单列表?我认为这是不可能的,因为类型擦除。您是否需要列表之类的东西来放置从数据库获取的数据,或者您正在尝试执行的类似操作?您可以创建
TypedQuery
。如何从
字符串中获取
Class
?@Lester我将更新答案,但是你没有办法直接使用类而不是类名吗?你可以改为创建
TypedQuery
。如何从
字符串中获取
class
?@Lester我会更新答案,但是你没有办法直接使用类而不是类名吗?