You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Method.invoke强转long报Cannot cast from object to long解决方法

报错根因

Method.invoke() 的返回值是 Object 引用类型,Java 不允许直接把引用类型强转为 long 这种基本数据类型,所以编译不通过。
如果被反射调用的目标方法本身返回 long 基本类型,反射执行时会自动把结果装箱成 Long 包装类返回,所以只需要把强转目标改成 Long,后续会自动拆箱为 long,就能通过编译。

修复方式

把报错行的 (long) method1.invoke(o) 替换为 (Long) method1.invoke(o) 即可,完整修正后的代码如下:

final Method method1 = method;
final Object o = object;
LongSupplier longsupplier = new LongSupplier() {
    private boolean disabled = false;
    public long getAsLong() {
        if (this.disabled) {
            return -1L;
        } else {
            try {
                return (Long) method1.invoke(o);
            } catch (Throwable throwable) {
                Config.warn("" + throwable.getClass().getName() + ": " + throwable.getMessage());
                this.disabled = true;
                return -1L;
            }
        }
    }
};
return longsupplier;
补充说明
  • 请确认你反射调用的目标方法返回值类型是 long 或 Long,否则运行时会抛出 ClassCastException
  • 如果目标方法可能返回 null,自动拆箱为 long 时会触发空指针,若存在该场景可以在强转后加判空逻辑,按需返回默认值即可。

内容的提问来源于stack exchange,提问作者ZeRealOne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:48:15