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?
No difference. The wildcard is erased at compile time.
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<?>