当前位置:  开发笔记 > 编程语言 > 正文

ClassCastException Double to Float,即使我没有使用Double

如何解决《ClassCastExceptionDoubletoFloat,即使我没有使用Double》经验,为你挑选了1个好方法。

我花了好几个小时来处理这个bug,对我来说这是一个非常奇怪的行为:

这是我的代码:

Map myMap = myService.calculateData(DateTime startDate, DateTime endDate);

if (!myMap.isEmpty()) {
    Double value1 = myMap.get("key1").doubleValue(); 
}

在调试器中,一切正常,我可以看到所有的值,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平等truemyMap.get("key1") instanceof Float平等false.

我在线上Double value1 = myMap.get("key1").doubleValue();或在线上得到错误Float value1 = myMap.get("key1");



1> Louis Wasser..:

这可能是一些腐败的正常症状,Map从一开始myService.calculateData就是如何构建的; 它不是真正的一个Map,它有Double,它出现.这通常表明存在一些受到抑制的不安全演员表或原型.

该投地Float将被隐式插入map.get("key1")在编译时调用,如泛型是如何正常开展的一部分.


通过`System.out.println(myMap.get("key1").getClass())`来确认.
推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有