emk*_*a86 7 java generics instanceof
我对Java和instanceof运算符中的泛型有疑问.
做这样的检查实例是不可能的:
if (arg instanceof List<Integer>) // immposible due to
// loosing parameter at runtime
Run Code Online (Sandbox Code Playgroud)
但是可以运行这个:
if (arg instanceof List<?>)
Run Code Online (Sandbox Code Playgroud)
现在我的问题是 - arg instanceof List 和 之间有什么区别arg instanceof List<?>吗?
Java泛型是通过擦除实现的,也就是说,附加类型信息(<...>)在运行时不可用,但是由编译器擦除.它有助于静态类型检查,但不能在运行时进行.
由于instanceof在运行时进行检查,而不是在编译的时候,你不能检查Type<GenericParameter>在instanceof ...表达.
至于你的问题(你似乎已经知道泛型参数在运行时不可用),List和之间没有区别List<?>.后者是一个通配符,它基本上表示与没有参数的类型相同的东西.这是告诉编译器的一种方式"我知道我不知道这里的确切类型".
instanceof List<?>归结为instanceof List- 完全相同.
| 归档时间: |
|
| 查看次数: |
427 次 |
| 最近记录: |