是否有包含标准库中所有方法描述符的 Java Class 库 "header files"?

Are there any Java Class Library "header files" containing all method descriptors in the standard library?

为了创建一个有效的 .class 文件,每个方法都必须有一个完整的内部名称和与之关联的类型描述符。在程序上创建这些时,是否可以使用某种查找 table(在 Java 之外,可以使用 ClassLoader)从方法名称中获取这些类型描述符?例如,如何从 Scanner.hasNextByteboolean java.util.Scanner.hasNextByte(int) / boolean java.util.Scanner.hasNextByte()(甚至从 java.util.Scanner.hasNextByteboolean java.util.Scanner.hasNextByte(int) / boolean java.util.Scanner.hasNextByte()) ?上面的示例中有重载,这是人类(但主要是计算机可读的)声明文件有望解决的另一个问题。

我找到了许多人类可读的文档来源,例如 https://docs.oracle.com/javase/8/docs/api/index.html 包含每个方法的使用、到其他地方的超链接等,但从来没有一个简单的文本文件或仅包含任何声明的文件集合格式。如果没有这样的文件,请不要担心,我可以尝试抓取一些烦人的 HTML 文件,但如果有的话会节省很多时间。谢谢!

如何从标准库的源文件构建它?

您引用的 Oracle Java 8 API 网页是由 Javadoc 处理 Java 标准库的源文件创建的。

如果您将 IDE 与调试器一起使用,您很可能已经下载了大部分标准库源代码。毕竟,如果你设置了一个断点,然后在程序step-by-step后面加上“Step into”,你就可以将程序的执行跟踪到标准库方法中。源文件将是 JDK.

的一部分

但是,由于许可限制,标准库源的某些部分可能不可用。

简短的回答是否定的

  • 没有包含 class 和 Java class 库的方法签名的“头文件”。 Java 工具链不需要这样的东西。第 3 方 Java 编译器或依赖于 Java SE class 库的其他语言的编译器也不会。

  • AFAIK,没有第 3 方工具可以构建此类文件或等效数据库或 in-memory 数据结构。

不过你可以创建一个。

  • 您可以选择现有的 Java 解析库,并使用它为 class 库中的所有源文件构建解析树,并发出以下信息你需要。

  • 您可以可能创建自定义 Javadoc“doclet”插件来发出信息。


话说回来,我不明白你为什么需要这样的映射。当然,您的 IDE 已经这样做了……并通过一些内部 API 公开了信息。如果这不是 IDE 插件,它是做什么用的?

您发表评论:

I'm making a compiler for a JVM-based programming language ....

啊……所以你的编译器应该做其他编译器做的事情。从“.class”文件中获取信息。您可以使用标准或自定义 class 加载器加载 class,或者您可以使用 asmbceljavassist 之类的库...可以读取“.class”文件而不加载它。

(我没有检查过,但我认为标准 javac 编译器使用内部 API 来执行此操作。)

请注意,您提出的方法不适用于与源代码不可用的第 3 方 Java 库交互 and/or javadoc 不可抓取。