Java: Непроверенное приведение от X к Y / как реализовать castOrNull

Я реализовал эту функцию:

 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();
        }
    }

У меня довольно часто встречаются подобные случаи в моем коде. И я думаю, что это более читабельно и проще, чем что-либо другое. Но, пожалуйста, дайте мне лучшее предложение, если у вас есть какие-либо способы сделать этот код еще более простым.

6
задан Albert 14 October 2010 в 13:56
поделиться