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