java - Eclipse 自动完成 - 当只有二进制 jar 可用时它如何知道泛型?

标签 java eclipse generics autocomplete jar

Java 泛型是使用类型删除实现的。这意味着如果我有一个方法:

public void setMapParam(Map<String, Integer> p) { ... }

编译后,它将在 .class 中结束为:

public void setMapParam(Map p) { ... }

我有一个包含上述通用类和方法的 JAR 文件。它只是二进制文件。没有源代码什么都没有。

但是当我在代码中使用它时,Eclipse 自动完成会给我 setMapParam(Map<String, Integer> p)即使在二进制文件中类似于 setMapParam(Map p) .

即使方法签名已被类型删除(到 Map<String, Integer>),Eclipse 现在如何类型(Map)?还是我遗漏了什么?

最佳答案

类型删除意味着编译后的代码不包含类型参数信息。类和成员定义中使用的类型参数存在于编译代码中并可通过反射获得(参见 TypeVariable )。

类型删除意味着对象实例 没有单独的类型参数。给定一个类定义 MapImpl extends HashMap<T extends Comparable, Integer>和该类的实例,您无法找出 T 的具体值是什么在创建实例的代码中使用,因为该信息不存在。但是你可以发现它extends Comparable并且值类型是 Integer ,因为该信息是类定义的一部分(并由所有实例共享)。

关于java - Eclipse 自动完成 - 当只有二进制 jar 可用时它如何知道泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5058036/

相关文章:

java - 在 Eclipse 的 Java 调试器中,如何在某个类的每个对象创建上设置断点?

arrays - 追加到 Swift 中的通用数组

java - OOP:如何编写能够一起工作的类族?

java - 使用循环获取 HashMap 值

java - Java 9 中类型推断检查的变化

java - 如何按需重新加载 com.google.common.base.Supplier 中的值

java - NULL值将文件加载到mysql表中

java - eclipse远程调试找不到源

java - 如何在 Eclipse 中查看最近的 CVS 项目更改?

ios - 如何在 Swift 中创建具有多个模型的通用数组?