我有一个重新排序java泛型的问题.据我所知,通用信息仅在编译时可用,通过称为"类型擦除"的过程,一旦编译代码并且生成.class文件,所有TYPE信息都会消失.
一旦.java文件被编译,List myList = new arrayList(),就是.class文件字节码所具有的,即使该列表被声明为.java文件中的字符串列表.
话虽如此,请考虑以下情况.
我有一个带有签名方法的jar
public void check(List<String> p)
Run Code Online (Sandbox Code Playgroud)
当我从另一个代码调用此方法时,编译器强制执行check方法的参数应该List<String>只是,没有别的.
既然检查方法存在于jar(.class文件)中List<String>,如果在生成.class文件时TYPE信息已经被REMOVED,编译器如何知道所需的TYPE信息?
类型擦除不会删除与泛型相关的所有信息.简单地说,问题(public void check(List<String> p))中的方法的签名被完整保留.保存的信息可以在运行时使用反射API(如 getGenericParameterTypes(),getTypeParameters()和其他方法)获得.
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |