I think due to type erasure , using instanceof
and class literals
are not allowed for parameterized generic types
except unbounded wild card types
. Why did the Java language designers allowed this exception ? There isn't any role of type erasure for unbounded wild card types ?
The point is that an object knows its concrete class - but not the generic type arguments for that. So if we construct an ArrayList<Integer>
, that knows at execution time that it's an ArrayList
of some kind - but it doesn't know about the Integer
part.
The "ArrayList
of some kind" part is precisely what ArrayList<?>
means, which is why:
if (foo instanceof ArrayList<?>)
is valid. It's just equivalent to using the raw type:
if (foo instanceof ArrayList)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With