Java ClassCastException加倍以浮动,即使在I';我没有用双人床
我花了几个小时研究这个bug,这对我来说是一个非常奇怪的行为: 这是我的密码:Java ClassCastException加倍以浮动,即使在I';我没有用双人床,java,casting,Java,Casting,我花了几个小时研究这个bug,这对我来说是一个非常奇怪的行为: 这是我的密码: Map<String, Float> myMap = myService.calculateData(DateTime startDate, DateTime endDate); if (!myMap.isEmpty()) { Double value1 = myMap.get("key1").doubleValue(); } Map myMap=myService.calculateDat
Map<String, Float> myMap = myService.calculateData(DateTime startDate, DateTime endDate);
if (!myMap.isEmpty()) {
Double value1 = myMap.get("key1").doubleValue();
}
Map myMap=myService.calculateData(日期时间开始日期,日期时间结束日期);
如果(!myMap.isEmpty()){
Double value1=myMap.get(“key1”).doubleValue();
}
在调试器中,一切正常,我可以看到myMap
的所有值,并且可以将value1
的值作为双精度
但是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()行中得到错误
或onFloat value1=myMap.get(“key1”)代码>这将是一个正常的症状,因为从myService.calculateData
开始构建Map
时出现了一些损坏;它不是一张真正的地图
,它里面有两个
s。这通常表示存在一些被抑制的不安全类型转换或rawtype
转换为Float
将在编译时隐式插入到map.get(“key1”)
调用中,这是泛型通常实现方式的一部分。异常发生在哪里?也许在一行你没有发布?请发布整个堆栈跟踪<代码>浮点值1=myMap.get(“key1”)代码>AFAIK无法引发该异常。这不能是您的实际代码,因为它在语法上无效。请您发布一个最小的、完整的、可验证的示例,我们可以通过它重现您的问题。@DaveNewton,是的,我也不明白如何Float value1=myMap.get(“key1”)代码>可以引发该异常。。。这快把我逼疯了!我将检查myService.calculateData中发生的情况,如果不起作用,我将发布整个堆栈跟踪。通过执行System.out.println(myMap.get(“key1”).getClass())
进行确认。是的,路易斯和安德烈亚斯,我认为你是对的,因为myMap.get(“key1”).getClass()给了我Double
,myMap.get(“key1”)Double的instanceof
等于true
和myMap.get(“key1”)Float的instanceof
等于false
。那么这个问题能否仅在myService.calculateData中解决?不是在我的代码中吗?@LouisWasserman,非常感谢,问题确实出在myService.calculateData
中。您为我节省了几个小时的调试时间!:)