Lan*_*uhn 10 java generics type-erasure
据我所知,泛型是Java的编译时功能,编译后的字节代码中不存在参数化类型信息.我现在发现了Field#getGenericType和Method#getGenericReturnType方法,从而打破了我的世界观.请帮我把它拼凑起来.
正确的运行时类型的对象被擦除.例如:
Object obj = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
obj.getClass()会回来的ArrayList.class.你甚至可以告诉它ArrayList有一个通用参数.但没有办法判断obj是创建为ArrayList<String>,ArrayList<Integer>,ArrayList<Object>,ArrayList(生),或其他任何东西.
静态类型信息仍然存在于类,方法等(尽管不适用于本地人).这只是在类文件中作为属性附加的额外数据,并且在运行时可用.可以想象它与具有运行时保留的注释非常相似.有问题吗?
| 归档时间: |
|
| 查看次数: |
1991 次 |
| 最近记录: |