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)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…