2013-09-11 6 views
0
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); 
    } 

Исключение брошено являетсяПочему этот кусок кода бросает ClassCastException

Вы не можете бросить java.lang.String к TIMESTAMP Здесь я предполагаю, OBJ [0] является тип объекта и приведения его в Timestamp Любые идеи будут заметны.

+0

Как вы вызываете верхний фрагмент кода? –

+4

Как вы заполняете 'arrayList'? По-видимому, 'obj [0]' является строкой. –

+0

@kocko Его статический метод Я буду использовать ClassName.methodName –

ответ

3

Исключение составляет довольно сам пояснительный. В Java все является объектом (за исключением примитивов, но это другой предмет). Итак, несмотря на то, что у вас есть массив из Object, это не значит, что вы можете произвольно наложить те Objects на все, что хотите.

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

obj[0] явно String при попытке что бросание, и как таковой вам нужно будет использовать SimpleDateFormat или подобное, чтобы разобрать, что String. Вы не можете наложить String на Timestamp по той простой причине, что Java не знает (и не может) знать, как это сделать.

+0

obj [0] - это, очевидно, String, вы будете разъяснять этот комментарий –

+0

Вы сказали, что ваше исключение было «Вы не можете использовать java.lang.String для Timestamp» Поэтому проблема заключается в том, что вы пытаетесь применить 'String' к' Timestamp'. Единственное место в этом коде, которое вы пытаетесь нанести что-то в «Timestamp», - это '(Timestamp) obj [0]'. Следовательно, 'obj [0]' является 'String'. 'String' - это' Object'. 'Timestamp' - это' Object'. Но 'String' *** *** ***' Timestamp', а также 'Timestamp'' String'. Таким образом, вы не можете просто ** отбрасывать ** один на другой, вы должны ** преобразовать ** строку в 'Timestamp'. – StormeHawke

+1

Вы можете проверить, является ли объект заданным типом с использованием 'instanceof'. 'if (! obj [0] instanceof Timestamp) {castToTimestamp (obj [0])}' – Marc

1

Вы должны преобразовать объект String в Timestamp с помощью метода Timestamp#valueOf(String s).

Изменить

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

в

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

Здесь obj [0] имеет тип Object, поэтому toString() необходимо вызвать. –

+0

Спасибо @kocko Теперь он дает желаемый результат. –

+0

Добро пожаловать. –

Смежные вопросы