gpt4 book ai didi

java - 如果未首先分配给 Number,Integer.longValue() 会抛出异常

转载 作者:行者123 更新时间:2023-12-03 22:47:33 26 4
gpt4 key购买 nike

public Long getId()
{
Some code ...

TypedQuery<Long> query = entityManager.createQuery(sQuery, Long.class);
return query.getSingleResult();
}

从这段代码中,我得到一个从 IntegerLongClassCastException。我在调试器中检查了 query.getSingleResult(); 并设置了 Integer 5。

如果我将代码更改为 query.getSingleResult().longValue(); 它仍然不起作用。我得到同样的异常(exception)。但是如果我使用

Number tmp = query.getSingleResult();
return tmp.longValue();

它有效。我的问题是为什么第一个解决方案不起作用? Surley 我可以更改我的查询,但我只想知道为什么第二个解决方案有效而第一个没有。

请随意更改我的问题的标题。提前致谢!

最佳答案

您的查询实际上返回了一个 Integer 但您通过调用 entityManager.createQuery(sQuery, Long.class) 假装它返回了一个 Long .

现在当你执行

query.getSingleResult()
query.getSingleResult().longValue()

由于您的泛型声明,编译器插入了对 Long 的转换。因此这实际上被执行了:

(Long)query.getSingleResult()
((Long)query.getSingleResult()).longValue()

并且 ClassCastException 被抛出,因为 Integer 不是 Long

当你打电话时

Number tmp = query.getSingleResult();

它实际上执行

Number tmp = (Number)query.getSingleResult();

并且此代码成功,因为 Integer 是一个 Number

所以不是 longValue() 抛出异常,而是之前发生的转换。

关于java - 如果未首先分配给 Number,Integer.longValue() 会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33520943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com