Java ClassCastException加倍以浮动,即使在I';我没有用双人床

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

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

这是我的密码:

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()行中得到错误
或on
Float 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
中。您为我节省了几个小时的调试时间!:)