首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参考匿名类中的公共Enum结果

参考匿名类中的公共Enum结果
EN

Stack Overflow用户
提问于 2009-12-28 18:02:31
回答 1查看 1.9K关注 0票数 13

我在编译时得到了一个我没想到的匿名类。相关代码如下,然后进行更详细的解释:

完整的CircuitType.java:

代码语言:javascript
复制
public enum CircuitType { V110A20, V110A30, V208A20, V208A30 }

从Auditor.java,第3-9行:

代码语言:javascript
复制
public class Auditor {
    private String[] fileNames;
    private int numV110A20;
    private int numV110A30;
    private int numV208A20;
    private int numV208A30;

从Auditor.java,第104-121行:

代码语言:javascript
复制
[...]
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行:

代码语言:javascript
复制
public class Circuit {
    private CircuitType myType;
    public CircuitType getType() {
        return this.myType;
    }
[...]

当命令

代码语言:javascript
复制
javac *.java

执行时,将生成匿名类Auditor$1.java。显然,这些文件都位于一个文件系统目录中,其中没有其他任何内容。

当104-121行被注释掉时,就不会生成匿名类。

起初我认为这是一个包问题,所以把这三个类放在一个包中,但是我对包的了解还不够,无法让它正常工作。如果这是一个真正的包装问题,有人能让我准确地了解如何给它们贴上标签吗?不过,如果不用的话,我宁愿不用打包。

匿名类之所以是一个问题,除了此类类通常意味着名称空间问题之外,还在于它破坏了我用于自动编译的Makefile。

更新

随附的是一个控制台会议,我希望它能揭开这个谜团:

代码语言:javascript
复制
% javap 'Auditor$1'
Compiled from "Auditor.java"
class Auditor$1 extends java.lang.Object{
    static final int[] $SwitchMap$CircuitType;
    static {};
}
EN

回答 1

Stack Overflow用户

发布于 2009-12-28 21:03:59

实际上(至少在某些情况下)会为switch语句生成一个内部类:

Java enum and additional class files

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1970713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档