“instanceof List”和“o instanceof List ”之间的区别
我认为以下内容没有任何区别:
Object o = new LinkedList(); System.out.println(o instanceof List); System.out.println(o instanceof List);
如果不能使用instanceof List
而不是使用instanceof List
实际用法,反之亦然?
没有不同。 通配符在编译时被擦除。
根据这篇博客,答案是“它们完全一样”:
因为javac禁止其目标类型为generics类型的instanceof表达式; 对于强制类型转换,编译器稍微宽松一些,因为允许转换为generics类型,但会发出警告(参见上文)。 无论如何,原始类型应该被无界通配符替换,因为它们具有类似的属性和子类型。
Object o = new ArrayList(); List> list_string = (List)o; //same as (List>)o boolean b = o instanceof List; //same as o instanceof List>