BigDecimal与ArrayList,java ClassCastException不兼容

时间:2017-02-27 21:40:48

标签: java arraylist classcastexception bigdecimal

我正在调试Eclipse中不同项目的一些代码,发现即使没有错误标志(只是警告),

public class BeanResultadoVO  extends BeanBase{
    private int resultCode = 0;
    private String resultMessage;
    private Object resultObject;


    public int getResultCode() {
        return resultCode;
    }
    public void setResultCode(int resultCode) {
        this.resultCode = resultCode;
    }
    public String getResultMessage() {
        return resultMessage;
    }
    public void setResultMessage(String resultMessage) {
        this.resultMessage = resultMessage;
    }
    public Object getResultObject() {
        return resultObject;
    }
    public void setResultObject(Object resultObject) {
        this.resultObject = resultObject;
    }
}

一旦我执行带有警告的行,它就会直接转到try / catch块中的异常,并显示以下消息:

  

java.math.BigDecimal与java.util.ArrayList不兼容

这是 beanResultVO

((ArrayList<BigDecimal>)beanResultVO.getResultObject()).add(someCoolVar);

现在,我已经尝试过了

{{1}}

得到不同的警告:

  

取消选中从Object转换为ArrayList

但同样的例外

3 个答案:

答案 0 :(得分:0)

你的问题是beanResultVO.getResultObject()是一个BigInteger,而不是一个ArrayList。因此,当您尝试将其转换为ArrayList时,它会为您提供此异常

((ArrayList)beanResultVO.getResultObject())

答案 1 :(得分:0)

由于有

,代码永远不会运行
BigDecimal someCoolVar = (BigDecimal)beanResultVO.getResultObject();

之前的几行

((ArrayList)beanResultVO.getResultObject()).add(someCoolVar);

并且任何改变resultObject中间beanResultVO成员和resultObject的内容都不能同时为ArrayListBigDecimal

答案 2 :(得分:0)

在Java中,检查所有的转换操作。无法进行强制转换时抛出ClassCastException。在你的例子中

beanResultVO.getResultObject()

是BigDecimal的类型。 BigDecimal无法强制转换为ArrayList,因为BigDecimal不是ArrayList的超类。 如果需要ArrayList,可以使用

Arrays.asList(beanResultVO.getResultObject())

Collections.singletonList(beanResultVO.getResultObject())

它返回你想要的类型,即

List<BigDecimal>