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);
并且 beanResultVO
和 resultObject
之间的 resultObject
成员不能同时是 ArrayList
和 BigDecimal
。
在 Java 中检查所有转换操作。当无法完成转换时,抛出 ClassCastException。在你的例子中
beanResultVO.getResultObject()
是 BigDecimal 类型。 BigDecimal 不能转换为 ArrayList,因为 BigDecimal 不是 ArrayList 的超类。
如果你需要 ArrayList,你可以使用
Arrays.asList(beanResultVO.getResultObject())
或
Collections.singletonList(beanResultVO.getResultObject())
它returns你想要的类型,即
List<BigDecimal>
我正在 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);
并且 beanResultVO
和 resultObject
之间的 resultObject
成员不能同时是 ArrayList
和 BigDecimal
。
在 Java 中检查所有转换操作。当无法完成转换时,抛出 ClassCastException。在你的例子中
beanResultVO.getResultObject()
是 BigDecimal 类型。 BigDecimal 不能转换为 ArrayList,因为 BigDecimal 不是 ArrayList 的超类。 如果你需要 ArrayList,你可以使用
Arrays.asList(beanResultVO.getResultObject())
或
Collections.singletonList(beanResultVO.getResultObject())
它returns你想要的类型,即
List<BigDecimal>