Я реализовал эту функцию:
static <X,Y> Y castOrNull(X obj) {
try {
return (Y)obj;
}
catch(ClassCastException e) {
return null;
}
}
Это дает мне предупреждение компилятора:
Type safety: Unchecked cast from X to Y
Что я не совсем понимаю. Разве try/catch
, который я здесь делаю, не проверяет это? Могу ли я проигнорировать предупреждение?
Будет ли моя функция работать должным образом или нет? Как бы я это правильно реализовал?
Я также пробовал с проверкой obj instanceof Y
, но она не работает из-за способа обработки обобщенных данных в Java.
Кстати, эта функция мне кажется весьма полезной (чтобы сделать какой-то другой код более чистым). Интересно, может ли такая функция уже существовать в Java?
Один пример, где я хочу его использовать:
void removeEmptyRawStrings() {
for(Iterator<Entity> e = entities.iterator(); e.hasNext();) {
RawString s = castOrNull(e.next());
if(s != null && s.content.isEmpty()) e.remove();
}
}
В моем коде такие случаи встречаются довольно часто. И я думаю, что это читабельнее и проще, чем все остальное. Но, пожалуйста, дайте мне лучшее предложение, если вы хотите узнать, как сделать этот код еще проще.