我试图将长转换为整数,但似乎没有任何工作,代码片段不会工作的是((int)jo.get("gold"))
整行代码是gamePlayer = new Player(((double) jo.get("hp")), ((double) jo.get("maxHp")), ((int) jo.get("gold")), true, jo.get("name").toString());
一旦我们剥离了Java正在做的装箱和拆箱,这就是您正在做的。
(java.lang.Integer)jo.get("hp")
其中jo.get("hp")
为运行时类型为(显然)java.lang.Long
的对象。现在,它看起来就像您无害地将long
转换为int
,但这是因为它都隐藏在自动装箱之后。实际上,您将Object
(而不是)和Integer
强制转换为Integer
。它与数值类型无关;这只是一个无效的向下转换。
要立即解决这个问题,您需要首先转换为正确的运行时类型,然后让自动装箱从那里进行转换。
(long)(Integer)jo.get("hp")
我找不到关于你正在使用的org.json.simple.JSONObject
类的很多文档,但我的猜测是它写得很差,并且有.get
返回Object
,因此你的困惑。Java有官方的内置JSON支持,所以我建议使用这个类。它是强类型的,可以比你现在使用的库更好地为你做类型检查。