2015-11-23 2 views
1

Я ожидал следующий код для получения предупреждения rawtype, и это не делает:Почему бросок типа raw не создает предупреждение на Java?

public class Test { 
    public void exampleMethod(Object object){ 
     if(object instanceof Collection){ 
      Collection<?> coll = (Collection) object; 
      System.out.println(coll); 
     } 
    } 
} 

Почему rawtype бросок не генерировать предупреждения?

ответ

3

Пункт предупреждения состоит в том, чтобы сообщить вам, что утверждение общего типа фактически не выполняется компилятором или исполняемым файлом, поэтому вы можете получить ClassCastExceptions дальше в своем коде.

Из-за ? с левой стороны вы не используете стираемый тип, так что приведение не должно притворяться, что нужно проверить этот стертый тип. Нет ситуации, когда эта строка приведет к ошибке времени выполнения из-за информации о неконтролируемом типе. Поэтому не нужно предупреждать.

С Collection<?>, когда вы получаете вещи, вы получаете Object. Это не подведет (как все, что вы могли бы получить, это Object).

И вам не разрешено ничего помещать в Collection<?>. Так что это тоже не вызовет ошибок.

Смежные вопросы