Я знаю, что мы не можем вызывать instanceof List<E>
, потому что List<E>
не является реализуемым типом. И instanceof List
, и instanceof List<?>
работают; однако IDE eclipse предлагает использовать instanceof List<?>
.
Интересно, почему он предлагает несвязанный подстановочный знак instanceof List<?>
вместо необработанного вызова instanceof List
. Имеет ли несвязанный подстановочный знак instanceof List<?>
какое-либо преимущество перед необработанным вызовом instanceof List
?
Заранее спасибо.
Редактировать 1: по сути, instanceof List
и instanceof List<?>
совпадают, так как компилятор удалит тип при компиляции. Но помимо косметической причины, как указывает Мена, есть ли какая-либо другая причина использовать instanceof List<?>
в пользу instanceof List
?
Изменить 2. Согласно этой записи от Oracle:
- Тип выражения instanceof/cast является необработанным
Это происходит очень часто, так как javac запрещает выражения instanceof, целевой тип которых является универсальным типом; для приведения компилятор немного более либерален, поскольку приведение к общему типу разрешено, но выдается предупреждение (см. выше). В любом случае необработанный тип следует заменить неограниченным подстановочным знаком, поскольку они имеют схожие свойства по отношению к типу. подтип.
Object o = new ArrayList<String>();
List<?> list_string = (List)o;
//same as (List<?>)o boolean b = o instanceof List; //same as o instanceof List<?>
Таким образом, мы можем сделать вывод, что помимо косметической причины, как сказал Мена, и ограничения на использование генетики, instanceof List
и instanceof List<?>
одинаковы.
instanceof List<?>
вместоinstanceof List<>
? - person Linh   schedule 05.08.2015instanceof List<>
не будет компилироваться, аinstanceof List
следует избегать, поскольку следует избегать необработанных типов (stackoverflow.com/questions/2770321/), поэтому он пытается научить вас избегать их. - person Tom   schedule 05.08.2015