【问题标题】:cast type error from long to decimal type object将类型错误从 long 类型转换为 decimal 类型对象
【发布时间】:2013-03-19 20:40:45
【问题描述】:

我有以下代码和成员值是类型对象,在此过程中 = long,我想将其转换为大十进制,当我尝试以下代码时出现错误:java.lang.Double 无法转换为 [ C

} else if  (typeName.equals("java.math.BigDecimal"))) {
        return new SwitchInputType<BigDecimal>(new BigDecimal((char[]) memberValue));

【问题讨论】:

  • memberValue的类型是什么?

标签: java casting type-conversion


【解决方案1】:

错误信息:

java.lang.Double cannot be cast to [C

告诉你这个演员表是非法的:

(char[]) memberValue

所以不要这样做。错误消息告诉您memberValueDouble,所以这应该可以工作:

return new SwitchInputType<BigDecimal>(new BigDecimal((Double) memberValue));

根据memberValue 的声明类型,强制转换可能完全没有必要,尽管它听起来就像声明的类型是Object。或者,由于有一个接受字符串的BigDecimal 构造函数,你可以尝试摆脱它,尽管它并没有那么臭:

return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue.toString()));

【讨论】:

    【解决方案2】:

    [C 表示“char 数组”类型,实际上,您不能将Double 转换为char 数组,也不应该这样做。根据消息,memberValueDouble,所以你只想做

    return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue));
    

    【讨论】:

    • 谢谢,但是当我尝试您的建议时,我收到以下 DT 错误构造函数 BigDecimal(Object) 未定义,知道吗?
    【解决方案3】:

    如果您收到该错误,则表示 memberValue 是 Double。在这种情况下,您可能应该只使用

    new BigDecimal(memberValue)
    

    但我必须查看更多代码才能确定。

    【讨论】:

      【解决方案4】:

      错误消息表示memberValuejava.lang.Double 对象,而您正尝试将其强制转换为char[]。这不起作用,因为Double 不是char[]

      在这种情况下,您只需移除演员表,然后在 Double 对象上调用 doubleValue()

      return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue.doubleValue()));
      

      这样,您将使用BigDecimal 的构造函数,该构造函数采用double 而不是char[]

      如果memberValue 的类型是Object,则必须先将其转换为Double

      ((Double)memberValue).doubleValue()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 2018-03-22
        • 2023-04-03
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        相关资源
        最近更新 更多