我刚刚构建了Tomcat7,并使用file
命令检查生成的类文件,打印如下
output/classes/org/apache/coyote/AbstractProcessor$1.class: compiled Java class data, version 52.0 [64-bit architecture=65593] [architecture=6382440]
output/classes/org/apache/coyote/AbstractProcessor.class: compiled Java class data, version 52.0 [architecture=14878464] [architecture=56073]
架构在输出中意味着什么?为什么编译器对同一文件中的类生成不同的结果?
为什么编译器会为 https://github.com/apache/tomcat/blob/7.0.x/java/org/apache/coyote/AbstractProcessor.java 生成 AbstractProcessor$1.class
?源代码中没有匿名内部类。
最佳答案
看起来这实际上是 file
命令中的一个错误。正在查看the file cafebabe
在file
github镜像中,它处理检测Java类文件和Mach-O(即Mac)二进制文件(因为它们都使用相同的魔术字符串),似乎“架构”部分意味着仅用于后者,但以某种方式应用于您的类文件。
请随意忽略这一点。
关于$1文件,用javap查看它表明它是一个合成类,并且包含一个名为$SwitchMap$org$apache$tomcat$util$log$UserDataHelper$Mode
的方法(原文如此) ),表明它是编译器生成的,用于帮助代码中的 switch 语句:
$ javap AbstractProcessor\$1.class
Compiled from "AbstractProcessor.java"
class org.apache.coyote.AbstractProcessor$1 {
static final int[] $SwitchMap$org$apache$tomcat$util$log$UserDataHelper$Mode;
static {};
}
关于java - java 类文件中的体系结构意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59855207/