我有一个关于重新评级 java 泛型的问题。 据我所知,通用信息仅在编译时可用,通过称为“类型删除”的过程来删除所有类型信息 一旦代码被编译并生成 .class 文件就会消失
一旦 .java 文件被编译,List myList = new arrayList() 就是 .class 文件字节码所具有的内容,即使该列表在 .java 文件中被声明为字符串列表。
话虽如此,请考虑以下场景。
我有一个带有签名方法的 jar
public void check(List<String> p)
当我从另一个代码调用此方法时,编译器强制检查方法的参数应为 List<String>
只是,没有别的。
现在,由于 check 方法存在于 jar(.class 文件)中,编译器如何知道 List<String>
所需的 TYPE 信息, 如果 TYPE 信息
制作 .class 文件时已被删除?
最佳答案
类型删除不会删除与泛型相关的所有信息。简而言之,相关方法的签名 ( public void check(List<String> p)
) 被完整保留。
可以在运行时使用反射 API 获取保留的信息(如 getGenericParameterTypes()
、 getTypeParameters()
及其他方法)。
关于java - java编译器如何知道jar中代码的泛型类型信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14083954/