当前位置:  开发笔记 > 编程语言 > 正文

在匿名类中声明枚举

如何解决《在匿名类中声明枚举》经验,为你挑选了1个好方法。

我们可以在匿名类中声明枚举吗?

我写了一个示例程序,令人惊讶的是一个空的枚举,在匿名类编译中没有任何枚举常量,但枚举常量枚举不会.

程序下面给出了错误信息

Main.java:16:错误:非静态变量,这不能从静态上下文obj.no引用(new a(){enum e {j}});

/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class a {}
class Ideone
{
    public void no(a arg) {;} ;
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        Ideone obj = new Ideone();
        obj.no(new a() { enum e{j,k;} });


    }
}

如果我删除枚举常量j和k,程序编译.

我不理解这种行为背后的理性.由于enum类是隐式静态的,因此不应该允许在匿名或本地类中使用,但是在这里它只允许空的枚举类.



1> Tunaki..:

您不能在匿名类中包含枚举类型.

这是因为匿名类是内部类(JLS 15.9.5):

匿名类始终是内部类(第8.1.3节)

和枚举类型不能在内部类中声明(JLS 8.9):

嵌套的枚举类型是隐式的static.允许声明嵌套枚举类型以冗余地指定static修饰符.

这意味着不可能在内部类的主体中声明枚举类型(第8.1.3节),因为内部类static除了常量变量之外不能有成员.


Eclipse(使用Mars 4.5.1测试)给出了两种情况的编译错误(在匿名类中有和没有常量的枚举)但似乎javac(使用1.8.0_51进行测试)只给出枚举时的情况的编译错误当枚举为空时,一个常数并编译好; 所以看起来有一个bug javac.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有