Java 返回值对象的ClassCastException getOrDefault
我有一个类型为Java 返回值对象的ClassCastException getOrDefault,java,hashmap,concurrenthashmap,Java,Hashmap,Concurrenthashmap,我有一个类型为ConcurrentMap的映射,我想对其使用getOrDefault。 现在,如果键存在,则返回值被类型转换为BigDecimal。 当我使用下面的代码时,我得到类强制转换异常 final BigDecimal value= (BigDecimal) map.getOrDefault("key", 0); 我试着使用(Object)0,但考虑到Java中的所有东西都是对象,这毫无意义。若getOrDefault返回对象,那个么为什么它在将0强制转换为Bigd
ConcurrentMap
的映射,我想对其使用getOrDefault
。
现在,如果键存在,则返回值被类型转换为BigDecimal
。
当我使用下面的代码时,我得到类强制转换异常
final BigDecimal value= (BigDecimal) map.getOrDefault("key", 0);
我试着使用(Object)0,但考虑到Java中的所有东西都是对象,这毫无意义。若getOrDefault
返回对象,那个么为什么它在将0强制转换为Bigdecimal时引发异常?
我用了下面的方法,效果很好
final BigDecimal value= (BigDecimal) map.getOrDefault("key", BigDecimal.ZERO);
无法强制转换0的原因是什么?您无法将0(或任何整数
)强制转换为大十进制
。如果要转换它们,请使用biginger.valueOf(0)
您可以在代码中为该特定常量使用
BigDecimal.ZERO
。0
不是BigDecimal,不能强制转换为它。它可以转换为整数
。这是否回答了您的问题@Eran从技术上讲,这是拳击,而不是施放。然而,奇怪的是,为什么我们不能将int
施放到bigdecime。这并不奇怪,因为int
和bigdecime
没有相互扩展。只有当B扩展了A
时,才可以将A
大小写转换为B
。您必须使用biginger.valueOf
方法来转换(而不是强制转换)它们。。