Разница между «instanceof List» и «o instanceof List <?>» - PullRequest
3 голосов
/ 09 июня 2011

Я не вижу разницы в следующем:

    Object o = new LinkedList<Long>();

    System.out.println(o instanceof List); 
    System.out.println(o instanceof List<?>);

Есть ли практическое применение instanceof List<?>, когда вместо него нельзя использовать instanceof List и наоборот?

Ответы [ 2 ]

9 голосов
/ 09 июня 2011

Без разницы. Подстановочный знак стирается во время компиляции.

3 голосов
/ 09 июня 2011

Согласно этому блогу ответ «они точно такие же»:

as javac запрещает выражения instanceof, целевой тип которых является универсальным типом; для приведений компилятор немного более разрешительный, так как приведение к обобщенному типу разрешено, но выдается предупреждение (см. выше). В любом случае, необработанный тип должен быть заменен неограниченным подстановочным знаком, так как он имеет схожие свойства с w.r.t. подтипы.

Object o = new ArrayList<String>();
List<?> list_string = (List)o; //same as (List<?>)o
boolean b = o instanceof List; //same as o instanceof List<?>
...