在Java 1.6中出现java.lang.ClassCastException: java.lang.Long无法转换为java.lang.Integer的错误。

30

尽管我将Object转换为int,但仍然出现了这个异常...

实际上,我的Hibernate-JPA方法返回的是Object,然后我将该Object转换为int...

这是我的Hibernate代码:

@Transactional
public Object getAttendanceList(User user){

    Query query = entityManager.createQuery("select Count(ad) from AttendanceDemo ad inner join ad.attendee at  where at.user=:user",
            Long.class);
    query.setParameter("user", user);
    return query.getSingleResult();
}

现在我正在将这个 Object 转换为 int

int k = (Integer) userService.getAttendanceList(currentUser);

我正在将Object转换为Integer


看起来 getAttendanceList 返回了 Long 类型。你可以发布相关的代码吗? - ajay.patel
你确定你返回的是整数吗?ClassCastException 表明你没有返回一个整数... - Matteo N.
是的,我想将getAttendanceList()方法的返回值存储到k中。然后才会出现ClassCastException,现在我正在进行(Integer)转换,但是再次出现了异常。 - SWEE
4个回答

71

使用:

((Long) userService.getAttendanceList(currentUser)).intValue();

.intValue() 方法在 Number 类中定义,而 Long 继承自该类。


1
但是IDE显示...方法intValue()在类型Object中未定义。 - SWEE
3
为什么不使用 ((Number) userService.getAttendanceList(currentUser)).intValue(); - johnchen902
@johnchen902 是的,那是真的...但在这种情况下,我不确定 OP 是否真的想要那样做。或者数据库模型会在一夜之间从“Long”更改为其他数字类型 ;) - fge
哦...谢谢.. fge..它正常工作了...但是当我们像这样编写((Number) userService.getAttendanceList(currentUser)).intValue();时就不工作了,为什么??? - SWEE
@user2496295 嗯!那应该可以运行...或者你有另一个不是JDK的Number类吗? - fge
@user2496295,那不是我想表达的意思。看看你的导入。看看Number的导入是什么。它应该是java.lang.Number - fge

6

结果数量(理论上)可以大于整数的范围。我建议重构代码并使用返回的long值。


0
你可以这样做:
int k = Math.toIntExact((Long) userService.getAttendanceList(currentUser));

0

只需将long更改为Number 记得你的数据库是Number而不是int或long。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接