有时我在android中看到使用静态枚举。但我无法找到这些信息(我知道C语言中的枚举),
public static enum brush{
static{
array[0] = brush1;
array[1] = brush2;
array[2] = brush3;
array[3] = brush4;
}
}
但是在项目中发生错误。错误信息是"语法错误,插入"标识符"完成EnumConstantHeader"但我不明白这是什么意思。
答案 0 :(得分:10)
问题是这是一个没有成员列表的枚举。你通常有:
public enum Foo {
VALUE1, VALUE2;
}
你可以有一个没有成员的枚举,但你仍然需要分号:
public enum Foo {
;
}
现在有效,虽然不是非常有用。
枚举声明中的static
部分可能是因为它嵌套在另一个类中。实际上并不需要这样做 - 嵌套的enum
声明是隐式静态的。
static { ... }
只是一个静态初始化程序,在初始化类型时运行。
Java中的枚举与C中的枚举完全不同。您应该阅读the enum
section on the Java tutorial了解更多详情。
答案 1 :(得分:3)
您错过了}
广告代码段中的static
:
public static enum brush{
static{
array[0] = brush1;
array[1] = brush2;
array[2] = brush3;
array[3] = brush4;
}
}
这里有几个代码味道:
brush
不符合命名约定:它应为Brush
array
不是一个有意义的名字,如果我没记错的话,我认为它也是一个保留的名字。你应该选择一些告诉它功能的东西brush1
也没那么有意义array
的声明您最有可能尝试实现的目标是:
public static enum Brush{
BRUSH_1, BRUSH_2, BRUSH_3, BRUSH_4;
}
答案 2 :(得分:2)
Java enum"是一种类型,其字段由一组固定的常量组成......只要你需要表示一组固定的常量,就应该使用枚举类型。"
如Java Language Specification, Section 8.9:
中所述枚举类型不得声明为抽象;这样做会导致一个 编译时错误。枚举类型是隐式最终的,除非它 包含至少一个具有类主体的枚举常量。它是一个 编译时错误,以明确声明枚举类型为final。 嵌套枚举类型是隐式静态的。允许 显式声明嵌套的枚举类型是静态的。这意味着 不可能定义本地枚举,或定义枚举 内心阶级。名为E的枚举类型的直接超类是Enum。 枚举类型没有除枚举之外的实例 常量。尝试显式是一个编译时错误 实例化枚举类型。
因为Java枚举类型适用于定义一组固定的常量,所以它通常用于表示Java程序中的常量:
典型示例:
1) 在名为Day的枚举中声明星期几。
public enum Day
{
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
2) 声明使用CSS时可以使用的边距类型:
/**
* Corresponds to CSS margins.
*/
public enum Margin
{
TOP, RIGHT, BOTTOM, LEFT
}
正如你所看到的,它没有任何价值,因为它们是常量,我们用全部大写字母命名它们,这与Java命名约定一致。
简单示例 -
public class JavaEnumToStringExample
{
public static void main(String[] args)
{
// loop through the enum values, calling the
// enum toString method for each enum constant
for (Day d: Day.values())
{
System.out.println(d);
}
}
}
enum Day
{
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
输出 -
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
Enum成语 -
答案 3 :(得分:0)
我认为这不是java中enum类型的正确实现。每当需要表示一组固定的常量时,都应该使用枚举类型。
语法:
access-modifier enum enum-name
{
enum_type_1,
enum_type_2 //(optioanl semi colon)
}
如果我们从中删除了enum
关键字,那么enum
会再次使用某些静态方法 静态方法。无法真正理解它背后的逻辑。可能您正在考虑在某些类中使用enum
,但嵌套的枚举声明是隐式静态的。