“instanceof List”和“o instanceof List <! - ? - >”之间的区别

时间:2011-06-09 09:00:37

标签: java syntax instanceof

我认为以下内容没有任何区别:

    Object o = new LinkedList<Long>();

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

instanceof List<?>无法替代使用instanceof List时是否有任何实际用途,反之亦然?

2 个答案:

答案 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<?>