Я реализовал эту функцию:
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();
}
}
У меня довольно часто встречаются подобные случаи в моем коде. И я думаю, что это более читабельно и проще, чем что-либо другое. Но, пожалуйста, дайте мне лучшее предложение, если у вас есть какие-либо способы сделать этот код еще более простым.