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(临时解决方案).
你1最有可能忽视或抑制不安全铸造一些编译器警告,和你Vector<Integer>真正包含一些Float对象.如果忽略这些警告,则不保证使用泛型的代码是静态类型安全的.
1 - 在这种情况下,这是一个你使用的库,这样做...
| 归档时间: |
|
| 查看次数: |
287 次 |
| 最近记录: |