从静态方法访问非静态枚举值

public enum sEnum { zero = 0, one = 1 } public int x; public static void a(sEnum s) { x = 3; if (s == sEnum.one) ... } 

为什么可以在这里检查枚举的值,因为不使用static关键字? 在语言规范中记录了哪些内容?

枚举只是命名值,因此您可以像在任何其他常量中一样在静态上下文中使用它们。

语言规范的第3.4.3节规定:

枚举的成员是枚举中声明的常量

我认为规格中的14.3是您正在寻找的:

枚举成员的命名和范围与类中的字段完全类似。 枚举成员的范围是其包含枚举类型的主体。 在该范围内,枚举成员可以通过其简单名称来引用。 在所有其他代码中,枚举成员的名称必须使用其枚举类型的名称进行限定。 枚举成员没有任何已声明的可访问性 – 如果枚举成员的包含枚举类型可访问,则可以访问该成员。