Instanceof for generic with <?> or without <?>
generics, instanceof, java
Solution
Java Generics are implemented by erasure, that is, the additional type information (`<...>`) will not be available at runtime, but erased by the compiler. It helps with static type checking, but not at runtime.
Since `instanceof` will perform a check at runtime, not at compile time, you can not check for `Type<GenericParameter>` in an `instanceof ...` expression.
As to your question (you probably seem to know already that the generic parameter is not available at runtime) there is no difference between `List` and `List<?>`. The latter is a wildcard which basically expresses the same thing as the type without parameters. It's a way of telling the compiler "I know that I don't know the exact type in here".
`instanceof List<?>` boils down to `instanceof List` - which are exactly the same.
Problem
I have a question about generics in Java and `instanceof` operator. It's immposible to make such instanceof check: ``` if (arg instanceof List<Integer>) // immposible due to // loosing parameter at runtime ``` but it's possible to run this one: ``` if (arg instanceof List<?>) ``` Now comes my question - is there any difference between `arg instanceof List` and `arg instanceof List<?>` ?