java.lang.ClassCastException:java.lang.Long 无法在 java 1.6 中转换为 java.lang.Integer

Posted

技术标签:

【中文标题】java.lang.ClassCastException:java.lang.Long 无法在 java 1.6 中转换为 java.lang.Integer【英文标题】:java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer in java 1.6 【发布时间】:2013-06-14 09:07:59 【问题描述】:

即使我将 Object 转换为 int,但会发生此异常...

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

这是我的休眠代码:

@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。你能发布相同的代码吗 您确定要返回整数吗? ClassCastException 说你没有返回一个整数...... 是的.. 我想将 getAttendanceList() 方法返回值存储到 k 中。然后只有 ClassCastException 来了,现在我正在转换为 (Integer) 但又来了那个异常.. 【参考方案1】:

用途:

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

改为。

.intValue() 方法在 Number 类中定义,Long 扩展了该类。

【讨论】:

但 IDE 显示... 方法 intValue() 未定义对象类型 为什么不使用((Number) userService.getAttendanceList(currentUser)).intValue(); @johnchen902 是的,这是真的……但在这种情况下,我不确定 OP 是否真的想要那样。或者 db 模型会在一夜之间从 Long 更改为其他数字类型;) 哦...谢谢您.. fge..它正在工作...但是当我们像 ((Number) userService.getAttendanceList(currentUser)).intValue();它不起作用为什么??? @user2496295 呃!那应该可以...或者您是否还有另一个不是 JDK 的 Number 类?【参考方案2】:

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

【讨论】:

以上是关于java.lang.ClassCastException:java.lang.Long 无法在 java 1.6 中转换为 java.lang.Integer的主要内容,如果未能解决你的问题,请参考以下文章