gpt4 book ai didi

java - 什么使 "interface name"与 "class name"不同?

转载 作者:行者123 更新时间:2023-11-30 10:07:19 25 4
gpt4 key购买 nike

paragraph 4.4.2在 Java 8 规范中(在其他一些地方也类似)提到了它

class_index

The value of the class_index item must be a valid index into the constant_pool table. The constant_pool entry at that index must be a CONSTANT_Class_info structure (§4.4.1) representing a class or interface type that has the field or method as a member.

The class_index item of a CONSTANT_Methodref_info structure must be a class type, not an interface type.

我环顾四周,但据我所知,单靠字节码不可能区分接口(interface)类型和类类型,即在运行时针对类加载器解析命名类/接口(interface)之前实际检查此要求.

我的假设是否正确,或者我是否错过了一种方法来单独检查类文件中单个 CONSTANT_Class_info 的此要求?

最佳答案

你是对的,CONSTANT_Class_info 不会告诉你引用的类型是否是接口(interface),除了实际解析类型之外,你只能在当前类文件中收集有关预期性质的提示的类型,并可能检测到它何时被不一致地使用。

除了 CONSTANT_Methodref_info 期望声明的类型不是接口(interface)和 CONSTANT_InterfaceMethodref_info 期望它是接口(interface)之外,super_class 中存在类型引用字段表示非接口(interface)类型,而 interfaces 中存在的任何类型数组意味着一个接口(interface)。

如果是嵌套类型,您可以检查 InnerClasses Attribute ,其中列出了所有嵌套类型及其访问标志,包括 ACC_INTERFACE

此外,每种用作注释的类型在技术上都是一个接口(interface),尽管注释属性不使用 CONSTANT_Class_info 池项,而是引用类型名称和签名字符串(CONSTANT_Utf8_info) 直接。

关于java - 什么使 "interface name"与 "class name"不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54380349/

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