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

如何将Long类型的CPU统计值转换为Float和Integer类型?

解决Java中Long对象转Float/Integer时的ClassCastException问题

嘿,这个问题我在项目里碰到好多次了,咱们来捋清楚为啥会报错,以及怎么解决~

首先得搞明白你报错的核心原因:你代码里的get("system_cpu_usage")返回的是一个Long对象,而Java里引用类型之间不能跨类型直接强转——比如Long和Float是平级的包装类,没有继承关系,你直接写(float) Long对象,JVM会误以为你要把Long对象强制转成Float对象再拆箱,这肯定会抛出ClassCastException的。

下面给你两种靠谱的解决方案:

方案一:明确转成Long后再转目标类型

先把返回值正确强转为Long对象,再通过包装类的方法或者自动拆箱转成float/integer:

// 先强转成Long对象(确保类型匹配)
Long systemCpuUsage = (Long) Docker.getStatistics("ENVX").getCpuStats().get("system_cpu_usage");
// 转float的两种方式
float floatValue = systemCpuUsage.floatValue();
// 或者利用自动拆箱转成long基本类型后再转float
float floatValue = (float) systemCpuUsage;

// 如果要转Integer的话
int intValue = systemCpuUsage.intValue();

方案二:通用型(兼容多种数值类型)

如果不确定返回的数值类型(比如有可能是Integer、Long甚至Short),可以先转成Number(所有数值包装类的父类),再转成目标类型,兼容性更强:

Number systemCpuUsage = (Number) Docker.getStatistics("ENVX").getCpuStats().get("system_cpu_usage");
// 转float
float floatValue = systemCpuUsage.floatValue();
// 转Integer
int intValue = systemCpuUsage.intValue();

这么处理就不会再报类型转换的异常啦,本质就是先拿到正确的数值包装类对象,再通过它的转换方法或者拆箱后转基本类型,而不是直接跨引用类型强转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:59:00