有什么方法可以实例化一个类<;C<;A、 B>&燃气轮机;java中的对象?

有什么方法可以实例化一个类<;C<;A、 B>&燃气轮机;java中的对象?,java,generics,type-erasure,Java,Generics,Type Erasure,我尝试在java中使用Hibernate和TypedQuery 我尝试调用的方法具有签名 <T> TypedQuery<T> createQuery(String qlString, Class<T> resultClass) TypedQuery createQuery(字符串qlString,类resultClass) 我想像bellow一样调用它,但是用一个实际实例替换null Class<Tuple2<Date,String>

我尝试在java中使用Hibernate和TypedQuery

我尝试调用的方法具有签名

<T> TypedQuery<T>   createQuery(String qlString, Class<T> resultClass)
TypedQuery createQuery(字符串qlString,类resultClass)
我想像bellow一样调用它,但是用一个实际实例替换null

 Class<Tuple2<Date,String>> cls=null;
 List<Tuple2<Date,String>> books=em.createQuery("select new io.vavr.Tuple2(date,title) from Book where publicationdate > '2008-01-01'",cls).getResultList();
Class cls=null;
List books=em.createQuery(“从publicationdate>'2008-01-01',cls.getResultList()中选择新io.vavr.Tuple2(日期,标题);
上面的代码经过编译,但显然带有空指针异常

如果我对擦除的理解是正确的,那么只要我得到类对象的一个实例,这就可以工作,因为所有泛型类型信息在运行时都会丢失


有没有什么方法可以得到一个类的实例,我可以把它分配给变量cls,这样代码就可以运行了?

基于我第一篇文章上的@Thomas评论,我带了以下内容

虽然它似乎不是实例化此类类对象的一种方法,但通过子类化可以实现相对可读的解决方案

在代码所在的类中,在任何函数之外添加

public static class DateStringPair extends Pair<Date,String>{
      public DateStringPair(Date d,String s){super(d,s);}
}
公共静态类DateStringPair扩展了数据对{
公共DateStringPair(日期d,字符串s){super(d,s);}
}
然后电话就变成了

List<DateStringPair> books=em.createQuery(
        "select new com.example.ConnectionAndQueryTest$DateStringPair(publicationDate,title) from Book where publicationDate > '2008-01-01'"
    ,DateStringPair.class).getResultList( );
List book=em.createQuery(
“从publicationDate>'2008-01-01'所在的书中选择new com.example.connection和QueryTest$DateStringPair(publicationDate,title)”
getResultList();
这有一个限制,即Pair类不能是final


虽然查询的可读性不如完全泛型支持那么灵活,但是查询的可读性可以在没有太多麻烦的情况下得到维护。

您可以使用
Tuple2.Class
而不是
Class
。除此之外,没有
Tuple2.class
只有
Tuple2.class
。您可以创建一个
类DateStringTuple extends Tuple2
,这样您就可以在
createQuery()
@Thomas中直接使用
DateStringTuple.class
,它不能解决问题,只会移动它。这样做会导致一个编译器错误:不兼容的类型:java.util.List无法转换为java.util.ListWell,第一部分不是关于解决方案,而是关于为什么您想要做的是不可能的。您可以使用原始类型(仅通过强制转换为
列表
),但这不能确保返回的元组具有类型
日期
字符串
。最好使用自定义类进行特定查询,而不是为简单的“快速和肮脏”情况设计的通用元组,但如果您仍然想保持通用性,只需使用Tuple2.class,并将其转换为(Tuple2)。删除令人困惑的行“Class cls=null”;考虑使用更抽象的
类型