【发布时间】:2009-12-28 18:02:31
【问题描述】:
我在编译时得到了一个我没想到的匿名类。相关代码如下,再详细解释:
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 {};
}
【问题讨论】:
-
不幸的是,我无法解决这个问题,但 +1 发布了一个非常明确的问题。
-
这可能不是您想听到的答案,但
make并不是真正适合Java 开发的工具。我强烈建议改用ant。随着您开发更复杂的应用程序,您将到处都有匿名类,这是正确的。 -
我有兴趣了解更多 Auditor.java。根据你在这里所说的,我很难相信 Circuit.java 是问题所在。
-
根据您的要求,我包含了更多的 Auditor.java。
-
如果您发布完整的代码,StackOverflow 可能不会爆炸。另一方面,欢迎您将您的代码通过电子邮件发送给我。 myFirstName.myLastName@gmail.com .
标签: java switch-statement enums anonymous anonymous-class