据我了解,泛型是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(使用前将#替换为@)