首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是什么使“接口名”与“类名”不同?

是什么使“接口名”与“类名”不同?
EN

Stack Overflow用户
提问于 2019-01-26 16:32:57
回答 1查看 119关注 0票数 2

在java 8规范的第4.4.2段 (类似于其他几个地方)中,也提到了

class_index class_index项的值必须是constant_pool表的有效索引。该索引处的constant_pool条目必须是一个CONSTANT_Class_info结构(§4.4.1),它表示一个类或接口类型,该类或接口类型将字段或方法作为成员。 CONSTANT_Methodref_info结构的class_index项必须是类类型,而不是接口类型.

我已经看过了,但据我所知,仅从字节码就不可能区分接口类型和类类型,即在运行时根据类加载器解析命名类/接口之前,实际检查这个需求。

我是正确的假设,还是我错过了一种方法来检查这个要求从一个单独的CONSTANT_Class_info在一个类文件中的隔离?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-28 16:31:44

您说得对,CONSTANT_Class_info不会告诉您所引用的类型是否是接口,而且除了实际解析该类型之外,您只能在当前类文件中收集有关该类型的预期性质的提示,并且可能会在使用不一致的情况下检测它。

除了CONSTANT_Methodref_info期望声明的类型不是接口和CONSTANT_InterfaceMethodref_info期望它是接口之外,班级字段中存在的类型引用意味着非接口类型,而接口数组中的任何类型都意味着接口。

在嵌套类型的情况下,您可以检查InnerClasses属性,它列出了所有嵌套类型及其访问标志,包括ACC_INTERFACE

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54380349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档