当前位置: 首页 > 知识库问答 >
问题:

有没有办法在java中实例化类对象?

陶征
2023-03-14

我试图在java中使用Hibernate和TypedQuery。

我试图调用的方法有一个签名

<T> TypedQuery<T>   createQuery(String qlString, Class<T> 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();

上面的代码经过编译,但显然带有空指针异常。

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

是否有任何方法,我可以得到一个类的实例,我可以分配给变量cls,使这个代码将工作?

共有1个答案

隆兴修
2023-03-14

根据@Thomas对第一篇帖子的评论,我发布了以下内容。

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

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

public static class DateStringPair extends Pair<Date,String>{
      public DateStringPair(Date d,String 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( );

这有一个限制,即Pair类不能是final。

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

 类似资料:
  • 问题内容: 我一直在寻找一个问题:从其字符串名称实例化一个类,该字符串名称描述了如何在具有名称时实例化一个类。有没有办法用Java做到这一点?我将拥有包名称和类名称,并且我需要能够创建具有该特定名称的对象。 问题答案: 两种方式: 方法1-仅适用于具有无参数构造函数的类 如果你的类具有无参数构造函数,则可以使用并使用该方法创建一个实例(尽管请注意,此方法通常被认为是有害的,因为它可以击败Java的

  • 问题内容: 说我有3个这样的课程: 难道那么有可能确定一个特定的对象是否是他的一个实例,或? 我认为这样的事情可能会起作用: 但是经过一点阅读之后,我认为它始终会被评为B,因为它只是测试强制转换是否有效,并且两者之间没有实质性差异。 问题答案: 做这个:

  • 问题内容: 我今天才刚刚开始学习GoLang,我正在尝试构建一个简单的Rest API Web服务器。 这是我希望将每个请求发送到Web服务器的响应结构: 这是我的 articles.go 文件,该文件具有获取数据库中所有文章的功能: 我在这里面临的问题是响应是这样的: {“状态”:200,“描述”:“”,“正文”:“ [{\” id \“:\” 1 \“,\”标题\“:\”第一\“,\”正文\“

  • 示例是带有 swap() 方法的 Card 类。实例化两个 Card 对象。该方法通过声明第三个 Card 变量来交换它们,但不实例化第三个对象。第三个变量用作临时保持器以支持交换。我预计交换不起作用,因为 temp 变量引用第一个对象,然后第一个对象被分配第二个对象,第二个对象被分配 temp,根据我的假设,它会拾取对第一个对象的更改。 输出: x y y x 我希望cards[0]和cards

  • 问题内容: 来自目标C的您可以在2个对象之间调用函数以使它们维护一个引用,如果在运行时您不希望在删除该对象的引用之前也不要破坏该对象的话,这会很方便。迅捷有与此类似的东西吗? 问题答案: 这是一个从jckarter的答案衍生而来的简单但完整的示例。 它显示了如何向现有类添加新属性。它通过在扩展块中定义计算属性来实现。计算的属性存储为关联的对象: 编辑: 如果需要支持获取未初始化属性的值并避免发生错

  • “任务”类实例需要包含有关其先决任务的信息。