我有以下代码和成员值是类型对象,在此过程中 = long,我想将其转换为大十进制,当我尝试以下代码时出现错误:java.lang.Double 无法转换为 [C
} else if (typeName.equals("java.math.BigDecimal"))) {
return new SwitchInputType<BigDecimal>(new BigDecimal((char[]) memberValue));
我有以下代码和成员值是类型对象,在此过程中 = long,我想将其转换为大十进制,当我尝试以下代码时出现错误:java.lang.Double 无法转换为 [C
} else if (typeName.equals("java.math.BigDecimal"))) {
return new SwitchInputType<BigDecimal>(new BigDecimal((char[]) memberValue));
错误信息:
java.lang.Double cannot be cast to [C
告诉你这个演员表是非法的:
(char[]) memberValue
所以不要这样做。错误消息告诉你那memberValue
是 a Double
,所以这应该有效:
return new SwitchInputType<BigDecimal>(new BigDecimal((Double) memberValue));
取决于声明的类型memberValue
转换可能是完全没有必要的,尽管听起来声明的类型是Object
. 或者,由于有一个BigDecimal
接受字符串的构造函数,你可以尝试摆脱这个,尽管它并没有那么臭:
return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue.toString()));
表示类型“[C
数组char
”,实际上,您不能将 aDouble
转换为 的数组char
,也不应该这样做。根据消息,memberValue
是一个Double
,所以你只想做
return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue));
如果您收到该错误,则表示 memberValue 是 Double。在这种情况下,您可能应该只使用
new BigDecimal(memberValue)
但我必须查看更多代码才能确定。
错误消息意味着它memberValue
是一个java.lang.Double
对象,并且您正在尝试将其强制转换为char[]
. 那是行不通的,因为 aDouble
不是 a char[]
。
在这种情况下,您可以删除演员表,然后调用doubleValue()
对象Double
:
return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue.doubleValue()));
这样,您使用的构造函数BigDecimal
采用 adouble
而不是 a char[]
。
如果类型memberValue
是Object
,您必须Double
先将其转换为:
((Double)memberValue).doubleValue()