我认为以下内容没有任何区别:
Object o = new LinkedList<Long>();
System.out.println(o instanceof List);
System.out.println(o instanceof List<?>);
当instanceof List<?>
无法替代使用instanceof List
时是否有任何实际用途,反之亦然?
答案 0 :(得分:9)
没有区别。通配符在编译时被删除。
答案 1 :(得分:3)
根据this博客,答案是“它们完全相同”:
因为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<?>