java - 带 <?> 或不带 <?> 的泛型实例

标签 java generics instanceof

我对 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/

相关文章:

java - 如何在 Intellij IDEA 社区版中为 gradle spring boot 项目设置 spring.config.location?

java - 从 XQ 中的 SOAP 请求中删除命名空间

java - 我可以限制哪些类可以实现接口(interface)吗?

JavaScript/Node : checking instanceof for parent method

java - 通过 DOM 解析器编辑 BIG XML

java - Oracle 数据类型 raw 的等效 java 类型是什么?

c# - 互操作类作为泛型类型参数有什么问题?

c# - 如何实现通用的 OpenForm 方法以允许任何类型的表单

java - 如何确定 Java 泛型方法中的类型?

java - 什么数据类型可以存储其他数据类型?