为什么这段代码抛出classCastException

时间:2013-09-11 14:39:35

标签: java classcastexception

List<Object[]> arrayList = new ArrayList<Object[]>();
for(Object[] obj: arrayList)
{
  // assuming at 0th location Timestamp value 
  Date dt = convertTimestampToDate((Timestamp)obj[0]) // Timestampvalue , '2013-09-11 00:00:0' throwing classCastException at this line
}

public static java.sql.Date convertTimestampToDate(java.sql.Timestamp timestamp) {
        if(isNull(timestamp))
            return null;
        long milliseconds = timestamp.getTime() + (timestamp.getNanos() / 1000000);
        return new java.sql.Date(milliseconds);
    }

抛出异常是

您无法将java.lang.String强制转换为Timestamp 在这里,我假设obj [0]是一个对象类型并将其转换为Timestamp 任何想法都会很明显。

2 个答案:

答案 0 :(得分:3)

异常是非常自我解释的。在Java中,一切都是对象(除了原语,但这是另一个主题)。所以,即使你有一组Object s,但这并不意味着你可以任意地将那些Objects投射到你想要的任何东西上。

Date dt = convertTimestampToDate((Timestamp)obj[0])
当您尝试演员时,

obj[0]显然是String,因此您需要使用SimpleDateFormat或类似内容来解析String。您不能将String强制转换为Timestamp,原因很简单,因为Java没有(也不可能)知道如何做到这一点。

答案 1 :(得分:1)

您应该使用Timestamp#valueOf(String s)方法将String对象转换为Timestamp

更改

Date dt = convertTimestampToDate((Timestamp)obj[0]) ;

Date dt = convertTimestampToDate(Timestamp.valueOf(obj[0].toString()));