C#
мне жаль, что я не мог switch()
ни на каком типе, и что case
могло быть любое выражение.
не Может использовать объектный синтаксис инициализатора с полями 'только для чтения' / private set
автоопоры. Обычно я хочу справку языка с созданием неизменных типов.
Использование {}
для [1 120] метод класса и пространства имен и и блоки свойства/индексатора и составные блоки и инициализаторы массива . Мешает выяснять, где Вы - когда они далеко друг от друга или не соответствовавшие.
я очень не хочу писать (from x in y ... select).Z()
. Я не хочу должным быть отступать к синтаксису вызова метода, потому что синтаксис запроса пропускает что-то.
я хочу do
пункт на синтаксисе запроса, который похож foreach
. Но это не действительно запрос затем.
я действительно достигаю здесь. Я думаю, что C# является фантастическим, и трудно найти много, это повреждается.
Прежде всего, вы должны убедиться, что ваш код компилируется без предупреждений об отключении. Это хороший показатель. Чтобы понять, почему, я предлагаю вам взглянуть на пример главы для дженериков из Effective 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
Итак, ответ нет, вы не можете избавиться от ClassCastException
, просто правильно используя дженерики .
"Чугунная" гарантия, которую предоставляют дженерики Java 5, заключается в том, что вы никогда не увидите ClassCastException из приведенных типов, вставленных компилятором при условии , что компиляция не выдала предупреждений о «непроверенном».
В реальной жизни часто можно ' • Избегайте непроверенных предупреждений, если в вашем коде используются устаревшие (не обобщенные) библиотеки. Затем сгенерированные компилятором приведения могут вызывать исключение ClassCastException, и ваша задача - предотвратить это, убедившись, что значения, возвращаемые кодом библиотеки, правильно типизированы для ваших объявлений.
В противном случае ситуация не изменится. Вне общих типов, если вы приведете к несовместимому типу, вы получите ClassCastException таким же образом, как и всегда.
(Хороший справочник по этому и другим вопросам универсальных типов - Java Generics and Collections . )
Нет. дженерики спасают вас только от ошибок времени компиляции, но не от исключений времени выполнения.
Нет. Использование Java 5.0 и обобщенного типа не делает вас защищенным от ClassCastException.