我正在学习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
}
答案 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