Что означает архитектура из файла класса java? - PullRequest
0 голосов
/ 22 января 2020

Я только что построил 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]

Что означает архитектура в выводе? Почему компилятор генерирует по-разному для классов из одного и того же файла?

И почему компилятор генерирует AbstractProcessor$1.class для https://github.com/apache/tomcat/blob/7.0.x/java/org/apache/coyote/AbstractProcessor.java? В исходном коде нет анонимного внутреннего класса.

1 Ответ

2 голосов
/ 22 января 2020

Похоже, что это действительно ошибка в команде file. Глядя на файл cafebabe в зеркале github file, который обрабатывает обнаружение как файлов класса Java, так и двоичных файлов Mach-O (то есть Ma c) (потому что они оба используют один и тот же маги c строк), кажется, что часть «архитектура» предназначена только для последнего, но каким-то образом применяется к файлам вашего класса.

Не стесняйтесь игнорировать это.

Что касается файла $ 1, просмотр его с помощью javap показывает, что это синтетический класс c и содержит метод с именем $SwitchMap$org$apache$tomcat$util$log$UserDataHelper$Mode (si c), предполагая, что он генерируется компилятором для помощи с оператором 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 {};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...