Java foreach循环不必要的浮动到int转换

Zai*_*tsu 0 java foreach json vector libgdx

Vector<Vector<Integer>> wavesInformation;

for(Vector<Integer> waveInformation : wavesInformation) {

    for(Integer enemyIndex : waveInformation) { 

    }

}
Run Code Online (Sandbox Code Playgroud)

给出运行时错误:

Exception in thread "LWJGL Application" java.lang.ClassCastException: java.lang.Float cannot be cast to java.lang.Integer
Run Code Online (Sandbox Code Playgroud)

for(Integer enemyIndex : waveInformation) {行.

这很混乱,因为没有使用浮动.

写作

for(Float enemyIndex : waveInformation) {   
Run Code Online (Sandbox Code Playgroud)

给出编译错误:

Type mismatch: cannot convert from element type Integer to Float
Run Code Online (Sandbox Code Playgroud)

编辑:

wavesInformation在调试模式下查找,发现存储的数字实际上是浮点数(0.0).

EDIT2:

嗯,这真的很奇怪.

出于实验目的,我将for循环更改为:

for(int i = 0 ; i < waveInformation.size() ; i++) {
Run Code Online (Sandbox Code Playgroud)

我试图将值waveInformation赋给变量,如下所示:

float x = waveInformation.get(i);
Run Code Online (Sandbox Code Playgroud)

和:

int x = waveInformation.get(i);
Run Code Online (Sandbox Code Playgroud)

我有同样的错误.

解:

问题出在Json解析器(libgdx)上.我已经读过libgdx json对嵌套泛型的支持有限,它只支持第一级.例如,ArrayList<Integer>它有效,值读取为整数(但json.setElementType(Mission.class, "wavesInformation", Integer.class);必须出现行(LIBGDX JSON特定).ArrayList<ArrayList<Integer>>现在不起作用.

解决方案是java.lang.Integer,在json文件中添加任意数量的该类型之前.同样替代--Gson(Google Json解析器)支持嵌套泛型.其他解决方案更复杂,需要编写自定义序列化方法(阅读更多).

因为我现在想使用libgdx json解析器,我已经改为`List>',并且我将每个值转换为Integer(临时解决方案).

Ste*_*n C 9

1最有可能忽视或抑制不安全铸造一些编译器警告,和你Vector<Integer>真正包含一些Float对象.如果忽略这些警告,则不保证使用泛型的代码是静态类型安全的.


1 - 在这种情况下,这是一个你使用的库,这样做...