我有一个对java泛型进行重新排序的问题。 据我所知,通用信息只能在编译时通过称为“类型擦除”的所有TYPE信息的过程获得 编译代码并生成.class文件后,它就会消失
一旦.java文件被编译,List myList = new arrayList(),就是.class文件字节码所具有的,即使该列表被声明为.java文件中的字符串列表。
话虽如此,请考虑以下情况。
我有一个带有签名方法的jar
public void check(List<String> p)
当我从另一个代码调用此方法时,编译器会强制检查方法的参数应仅为List<String>
,而不是其他任何内容。
既然检查方法存在于jar(.class文件)中,如果TYPE信息,编译器如何知道List<String>
所需的TYPE信息
当.class文件被删除时已经被删除了吗?
答案 0 :(得分:7)
类型擦除不会删除与泛型相关的所有信息。简而言之,有问题的方法(public void check(List<String> p)
)的签名将保留完整详细信息。
保留的信息可以在运行时使用反射API获得(如getGenericParameterTypes()
,getTypeParameters()
和其他方法)。