Java 为什么只在顶级类或接口上枚举?

Java 为什么只在顶级类或接口上枚举?,java,enums,Java,Enums,我正在学习Java并编写了一个非常简单的程序。在其中,我可以将枚举放在最顶层,但不能放在方法内部。在我看来,枚举几乎类似于常量,所以为什么不在方法中使用它们呢 在我的程序中,允许使用enum1,但不允许使用enum2。为什么? enum enum1 {A, B, C}; public static void main(String[] args) { enum enum2 {A, B, C}; // only on a top level class or interface }

我正在学习Java并编写了一个非常简单的程序。在其中,我可以将枚举放在最顶层,但不能放在方法内部。在我看来,枚举几乎类似于常量,所以为什么不在方法中使用它们呢

在我的程序中,允许使用enum1,但不允许使用enum2。为什么?

enum enum1 {A, B, C};

public static void main(String[] args)
{
    enum enum2 {A, B, C};  // only on a top level class or interface
}

因为枚举是一种特殊类型的类定义


doc描述了一些有关编译器执行的特殊操作的信息,包括添加静态方法(valueOf)。虽然可以使用方法的上下文声明匿名类,但它不能有静态方法。

这可能与枚举的编译方式与类类似有关。出于同样的原因,您不能在方法中声明类定义,也不能在枚举中声明。

枚举远不止是常量,您可以为它们创建构造函数。它们就像类,不能在方法中定义类,枚举也是如此。
如果你想要常数,你最好考虑使用最终的静态VaR /P>< P> java中的Enums实际上是在创建一个类,这使得它们有这样的局限性。

看到这个帖子,你只是指向另一个问题,他们不知道原因是什么…@user2864740,但为什么?这和说你可以有任何颜色,除了蓝色是一样的。@user2864740不完全正确;类可以在方法内部定义。(试试看!)@Jesper嗯,hmmpf。我错了,这是一个多么奇怪的构造。但是你可以在一个方法中声明类。当然,它们是匿名类,但它们仍然在方法中声明。它们是非匿名的@Brett Okken链接文档是他的答案。从来没有说过它们不是-只是澄清一下。@Stendika这是Java的一个鲜为人知的特性,但实际上可以在方法中定义非匿名类。你自己试试吧。。。