gpt4 book ai didi

java - 泛型类型存储在 java 类文件中的什么位置?

转载 作者:太空狗 更新时间:2023-10-29 22:49:00 24 4
gpt4 key购买 nike

我很清楚泛型类型在编译时会从 Java 代码中删除。 1.5+ JVM 使用什么信息(属性?)来实现 getGenericType 等?

最佳答案

它们存储在Signature 属性中;参见 updated Java Virtual Machine Specification 的第 4.8.8 节, 以及字段类型签名格式的 4.4.4 节。

这是一个使用 javap -verbose java.util.Map 的例子:

public interface java.util.Map
SourceFile: "Map.java"
Signature: length = 0x2
00 1E
[other attributes omitted]

此处的 Signature 属性指定(如果您将其理解为大端,就像 JVM 类文件格式中的所有整数一样)常量池值 #30 (30 = 0x1E)。那么让我们看看那里:

const #30 = Asciz       <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/lang/Object;;

在 4.4.4 中指定的语法上下文中阅读此内容。因此,这使用了两个类型参数,K extends java.lang.ObjectV extends java.lang.Object。类型本身 (Map) 也扩展类 java.lang.Object,但没有接口(interface)。

关于java - 泛型类型存储在 java 类文件中的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/937933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com