我有以下代码和成员值是类型对象,在此过程中 = 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()