0

Я получаю ClassCastException в своем коде. Первоначально цель заключалась в том, чтобы преобразовать Set to List, поскольку метод refreshDetailVOTable получит только Set. Возможно, проблема заключалась в преобразовании Set to List. refreshDetailVOTable может принять неправильный список, поэтому я получаю ClassCastException.Исключение произошло во время диспетчеризации событий: java.lang.ClassCastException в среде JRE 1.4

По результатам расследования выяснилось, что:

Я использую все типы сырья. Вместо этого я должен использовать дженерики. Они помогут найти такую ​​ошибку во время компиляции.

Метод принимает параметр Список detailIRsToDelete, от которого я получил итератора и итерацию по элементам, как так:

  for (Iterator iDetails = detailIRsToDelete.iterator(); iDetails.hasNext();) { 
      IdentifiableReference detailIR = (IdentifiableReference) iDetails.next(); 

Я мог бы случайно поставить что-то другое, чем IdentifiableReference в detailIRsToDelete, таким образом, получая ClassCastException в инструкции присваивания в цикле.

Параметр списка должен затем быть объявлен как:

List <IdentifiableReference> detailIRsToDelete

Акт сдачи вещей в этот список будет проверен компилятором, и произойдет ошибка в точке, где ошибочный объект был добавлено во время компиляции, а не позже во время выполнения, как это было возможно.

Вопрос: Тогда это должно решить Cast исключения класса, однако, это не может быть применен к текущей JRE, который составляет 1,4

У нас есть какой-либо обходной путь для JRE 1.4 в стороне от модернизации?

+0

Если этот список используется в достаточно небольшом количестве мест, может быть, стоит поставить на дженерики в временно в любом случае. Это, по крайней мере, покажет вам, где ошибка. Однако вы, безусловно, должны обновиться с 1.4. Вам нужно будет сделать это некоторое время, и здесь, по крайней мере, это правдоподобная мотивация. – EJP

ответ

-1

вы можете использовать instanceof, прежде чем пытаться бросить

Object o = iDetails.next(); 
if(o instanceof IdentifiableReference) 
    IdentifiableReference detailIR = (IdentifiableReference)o; 
+0

Идея состоит в том, чтобы найти проблему, а не игнорировать ее при ее возникновении. – EJP