我对 Java 中的泛型和 instanceof
有疑问运算符。
不可能进行这样的instanceof check:
if (arg instanceof List<Integer>) // immposible due to
// loosing parameter at runtime
但是可以运行这个:
if (arg instanceof List<?>)
现在我的问题来了 - 之间有什么区别 arg instanceof List
和 arg instanceof List<?>
?
最佳答案
Java Generics 是通过erasure 实现的,也就是说,额外的类型信息(<...>
)在运行时将不可用,而是被编译器删除。它有助于进行静态类型检查,但不会在运行时进行。
自 instanceof
将在运行时执行检查,而不是在编译时执行,您无法检查 Type<GenericParameter>
在instanceof ...
表达。
至于您的问题(您可能似乎已经知道通用参数在运行时不可用),List
之间没有区别。和 List<?>
.后者是一个通配符,基本上表达与没有参数的类型相同的东西。这是一种告诉编译器“我知道我不知道这里的确切类型”的方式。
instanceof List<?>
归结为 instanceof List
- 完全一样。
关于java - 带 <?> 或不带 <?> 的泛型实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14535384/