为什么只在顶级课程或界面上枚举?

时间:2014-06-17 20:33:34

标签: 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
}

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

枚举不仅仅是常量,你可以为它们创建构造函数。它们就像类,你不能在方法中定义一个类,枚举也是如此。 如果你想要不变,最好考虑使用final static var

答案 3 :(得分:0)

Java中的枚举实际上是在创建一个类,这会导致它们有这样的限制。

http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html