Вопрос

Поскольку дженерики проверяются только во время компиляции с Java 5, могут ли они избежать ClassCastExceptions во всех ситуациях?

Это было полезно?

Решение

Прежде всего, вы должны убедиться, что ваш код компилируется без необработанных предупреждений.Это хороший показатель.Чтобы понять почему, я предлагаю вам взглянуть на пример главы для дженериков из эффективной Java.

Во-вторых, дженерики не могут защитить вас от такого кода, как:

public void methodOne(Integer argument)  {
     methodTwo(argument);
} 

public void methodTwo(Object argument) {
     System.out.println(((Date) argument).getTime());
}

В-третьих, если вы тем или иным образом возитесь с загрузчиками классов, вам может показаться странным ClassCastExceptions, например , в эта тема обсуждения.Это ошеломляющее зрелище

java.lang.ClassCastException:javax.mail.Session не может быть преобразован в javax.mail.Session

Итак, ответ таков нет, ты не можешь избавиться от ClassCastExceptions просто путем правильного использования дженериков.

Другие советы

"Железная" гарантия, которую предоставляют Java 5 generics, заключается в том, что вы никогда не увидите ClassCastException из приведений, вставленных компилятором предоставленный эта компиляция не выдала никаких "непроверенных" предупреждений.

В реальной жизни вы часто не можете избежать непроверенных предупреждений, если в вашем коде используются устаревшие (негенерифицированные) библиотеки.Затем сгенерированные компилятором приведения может бросьте ClassCastException, и ваша задача - предотвратить это, убедившись, что значения, возвращаемые библиотечным кодом, правильно типизированы для ваших объявлений.

В остальном ситуация остается неизменной.Помимо дженериков, если вы приведете к несовместимому типу, вы получите ClassCastException так же, как и всегда.

(Хорошей ссылкой на этот и другие общие вопросы является Дженерики и коллекции Java.)

Нет.Использование Java 5.0 и generics type не делает вас защищенным от ClassCastException.

Нет.дженерики спасают вас только от ошибок во время компиляции, а не от исключений во время выполнения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top