问题
I don't see any difference in the following:
Object o = new LinkedList<Long>();
System.out.println(o instanceof List);
System.out.println(o instanceof List<?>);
Is there any practical use of instanceof List<?>
when instanceof List
can't be used instead and vise versa?
回答1:
No difference. The wildcard is erased at compile time.
回答2:
According to this blog the answer is 'they are exactly the same':
as javac forbids instanceof expressions whose target type is a generic type; for casts, the compiler is slightly more permissive since casts to generic type are allowed but a warning is issued (see above). Anyway, the raw type should be replaced by an unbounded wildcard, as they have similar properties w.r.t. subtyping.
Object o = new ArrayList<String>();
List<?> list_string = (List)o; //same as (List<?>)o
boolean b = o instanceof List; //same as o instanceof List<?>
来源:https://stackoverflow.com/questions/6290392/the-difference-between-instanceof-list-and-o-instanceof-list