对匿名类中公共枚举结果的引用
我在编译时得到了一个我意想不到的匿名类。相关代码如下,然后进行更详细的说明:
整个电路类型.java:
public enum CircuitType { V110A20, V110A30, V208A20, V208A30 }
来自审计员.java,第3-9行:
public class Auditor {
private String[] fileNames;
private int numV110A20;
private int numV110A30;
private int numV208A20;
private int numV208A30;
来自审计员.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;
}
[...]
从电路.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 {};
}