Во время компиляции я получаю анонимный класс, которого не ожидал. Соответствующий код следует, а затем более подробное объяснение:
Полнота CircuitType.java:
public enum CircuitType { V110A20, V110A30, V208A20, V208A30 }
Из Auditor.java, строки 3-9:
public class Auditor {
private String[] fileNames;
private int numV110A20;
private int numV110A30;
private int numV208A20;
private int numV208A30;
Из Auditor.java, строки 104-121:
[...]
switch (newCircuit.getType()) {
case V110A20:
this.numV110A20++;
break;
case V110A30:
this.numV110A30++;
break;
case V208A20:
this.numV208A20++;
break;
case V208A30:
this.numV208A30++;
break;
default:
System.err.println("An Error Has Occured.");
System.exit(-1);
break;
}
[...]
Из Circuit.java, строки 1-5:
public class Circuit {
private CircuitType myType;
public CircuitType getType() {
return this.myType;
}
[...]
Когда команда
javac *.java
выполняется, генерируется анонимный класс Auditor $ 1.java. Очевидно, что все файлы располагаются рядом друг с другом в каталоге файловой системы, в котором больше ничего не содержится.
Когда строки 104–121 закомментированы, анонимный класс не создается.
Сначала я подумал, что это проблема с пакетом, поэтому поместил три класса в пакет, но я недостаточно знал о пакетах, чтобы заставить его работать. Если это действительно проблема с упаковкой, может ли кто-нибудь объяснить мне, как их пометить? Однако я бы предпочел не упаковывать их, если мне это не нужно.
Причина, по которой анонимный класс является проблемой, помимо того факта, что такие классы обычно означают проблему с пространством имен, заключается в том, что он нарушает мой Makefile, который я использую для автоматической компиляции.
Обновить
Прилагается консольный сеанс, который, я надеюсь, может пролить свет на эту загадку:
% javap 'Auditor$1'
Compiled from "Auditor.java"
class Auditor$1 extends java.lang.Object{
static final int[] $SwitchMap$CircuitType;
static {};
}
make
не совсем подходящий инструмент для разработки на Java. Я настоятельно рекомендую вместо этого использоватьant
. По мере разработки более сложных приложений анонимные классы будут повсюду, и это правильно. - person Carl Smotricz   schedule 28.12.2009