Why is instanceof operator allowed on an unbounded wild card type but not on other parameterized types in Java?

前端 未结 1 1118
别跟我提以往
别跟我提以往 2020-12-19 07:45

I think due to type erasure , using instanceof and class literals are not allowed for parameterized generic types except unbound

相关标签:
1条回答
  • 2020-12-19 08:32

    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)
    
    0 讨论(0)
提交回复
热议问题