java 类型擦除与 Field#getGenericType 和 Method#getGenericReturnType

2023-11-21

据我了解,泛型是Java的编译时特性,编译后的字节代码中不存在参数化类型信息。我现在发现了 Field#getGenericType 和 Method#getGenericReturnType 方法,从而粉碎了我的世界观。请帮我把它拼凑起来。


仅运行时类型的对象将被删除。例如:

Object obj = new ArrayList<String>();

obj.getClass()将返回ArrayList.class。你甚至可以说ArrayList有一个通用参数。但没有办法判断是否obj被创建为ArrayList<String>, ArrayList<Integer>, ArrayList<Object>, ArrayList(原始),或其他任何东西。

类、方法等的静态类型信息仍然存在(尽管局部变量不存在)。这只是作为属性附加在类文件中的额外数据位,并且在运行时可用。将其视为具有运行时保留的注释非常相似。有问题吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java 类型擦除与 Field#getGenericType 和 Method#getGenericReturnType 的相关文章

随机推荐