我花了好几个小时来处理这个bug,对我来说这是一个非常奇怪的行为:
这是我的代码:
Map<String, Float> myMap = myService.calculateData(DateTime startDate, DateTime endDate);
if (!myMap.isEmpty()) {
Double value1 = myMap.get("key1").doubleValue();
}
Run Code Online (Sandbox Code Playgroud)
在调试器中,一切正常,我可以看到所有的值,myMap我可以得到value1Double 的值.
但是,IntelliJ会抛出错误:
java.lang.ClassCastException:java.lang.Double无法强制转换为java.lang.Float
我试过更换 Double value1 = myMap.get("key1").doubleValue();
用: Float value1 = myMap.get("key1");
我得到完全相同的错误,即使我没有使用任何双倍!
另外我不明白为什么它说Double不能被转换为Float,当我实际上试图将Float转换为Double时,所以它是另一种方式.
更新:回答路易斯和安德烈亚斯的建议,myMap.get("key1").getClass()给我Double,myMap.get("key1") instanceof Double平等true和myMap.get("key1") instanceof Float平等false.
我在线上Double value1 = myMap.get("key1").doubleValue();或在线上得到错误Float value1 = myMap.get("key1");
这可能是一些腐败的正常症状,Map从一开始myService.calculateData就是如何构建的; 它不是真正的一个Map<String, Float>,它有Double,它出现.这通常表明存在一些受到抑制的不安全演员表或原型.
该投地Float将被隐式插入map.get("key1")在编译时调用,如泛型是如何正常开展的一部分.
| 归档时间: |
|
| 查看次数: |
1332 次 |
| 最近记录: |