BigDecimal 与 ArrayList 不兼容,java ClassCastException

BigDecimal incompatible with ArrayList, java ClassCastException

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

try
    {   
        conn =  dss.connect();

        System.out.println("[SIGN]: Executing first step ");

        beanResultVO = executeFirstStep(usuario,conn,parametros,beanResultadoVO);

        if(beanResultVO.getResultCode() == IConstants.SWS_MSG_SUCCESSFUL){                          

            BigDecimal someCoolVar = (BigDecimal)beanResultVO.getResultObject();
            System.out.println("[SIGN]: end of the first step ");
            ((ArrayList)beanResultVO.getResultObject()).add(someCoolVar); // <--- WARNING HERE: The method add(Object) belongs to the raw type ArrayList. References to generic type ArrayList<E> should be parameterized
            saveStuff(conn);
        }
    }
    catch(Exception e)
    {
        System.out.println("error: "+e); // THIS SHOWS -->  java.math.BigDecimal incompatible with java.util.ArrayList
        e.printStackTrace();            
        beanResultVO.setResultCode(IConstants.SWS_MSG_ERROR);
        undoStuff(conn);
    }

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

java.math.BigDecimal incompatible with java.util.ArrayList

这里是beanResultVO :

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;
    }
}

现在,我已经尝试做到了

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

收到不同的警告:

Unchecked cast from Object to ArrayList

但同样例外

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

((ArrayList)beanResultVO.getResultObject())

代码永远不会 运行 因为有

BigDecimal someCoolVar = (BigDecimal)beanResultVO.getResultObject();

前几行

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

并且 beanResultVOresultObject 之间的 resultObject 成员不能同时是 ArrayListBigDecimal

在 Java 中检查所有转换操作。当无法完成转换时,抛出 ClassCastException。在你的例子中

beanResultVO.getResultObject()

是 BigDecimal 类型。 BigDecimal 不能转换为 ArrayList,因为 BigDecimal 不是 ArrayList 的超类。 如果你需要 ArrayList,你可以使用

Arrays.asList(beanResultVO.getResultObject())

Collections.singletonList(beanResultVO.getResultObject())

它returns你想要的类型,即

List<BigDecimal>