Java 枚举不能用于固定常量?
我使用下面的方法来定义固定的常量集Java 枚举不能用于固定常量?,java,enums,Java,Enums,我使用下面的方法来定义固定的常量集 private enum MENU_OPTIONS { MENU_SEND_SMS, MENU_COPY_SMS, MENU_ADD_SMS, MENU_POST_FACEBOOK, MENU_TWEET } 我有一个接受INT的方法 menu.add (int, int, int, String); 因此,当我向上述方法提供“菜单选项。菜单发送短信”时,它会报告错误 menu.add(0, MENU_SEND_SMS, 0,
private enum MENU_OPTIONS {
MENU_SEND_SMS,
MENU_COPY_SMS,
MENU_ADD_SMS,
MENU_POST_FACEBOOK,
MENU_TWEET
}
我有一个接受INT的方法
menu.add (int, int, int, String);
因此,当我向上述方法提供“菜单选项。菜单发送短信”时,它会报告错误
menu.add(0, MENU_SEND_SMS, 0, ); // error: The method add(int, int, int, CharSequence) in the type Menu is not applicable for the arguments (int, FavoriteSMSFragment.MENU_OPTIONS, int, String)
因此,如果我想使用一组固定的常量,我应该如何定义枚举?在Java中,枚举更像是一个类的命名实例。类型是一种特殊的数据类型,使变量成为一组预定义的常量<代码>菜单发送\u短信属于
菜单选项
类型。它不是primitiveint
类型。它不像其他语言(如C)中使用的enum
那样工作
你可以做三件事:
1) 更改参数的类型
menu.add (int, MENU_OPTIONS, int, String);
2) 如果仍保持现有的方法定义:
menu.add (int, int, int, String);
然后调用为:
MENU_OPTIONS option = MENU_OPTIONS.MENU_SEND_SMS
menu.add(0, option.ordinal(), 0, "someString");
3) 将枚举定义为:
public enum MENU_OPTIONS {
MENU_SEND_SMS(0),
MENU_COPY_SMS(1),
MENU_ADD_SMS(2),
MENU_POST_FACEBOOK(3),
MENU_TWEET(4);
private final int option;
private MENU_OPTIONS (int option) {
this.option= option;
}
public int getOption() {
return option;
}
}
并将其用作:
menu.add(0, MENU_OPTIONS.MENU_SEND_SMS.getOption(), 0, "someString");
它将打印菜单\添加\ SMS(类型为菜单\选项
)
您可能希望使用从枚举中获取int值:
System.out.println(MENU_OPTIONS.MENU_ADD_SMS.ordinal())代码>
现在它将打印2,方法除外
或者,以头韵形式,您可以更改该方法,使其接受菜单\u选项,而不是int
枚举是一个类。MENU\u OPTIONS.MENU\u SEND\u SMS
的类型是MENU\u OPTIONS
(由于它是一个表示单个菜单选项的类,因此应命名为MENU option
)
因此,您的add()
方法应该采用MenuOption
类型的参数,而不是int
类型的参数。这是更安全的,因为它记录了方法预期的信息(int比MeNuEuple更模糊),并且因为除了EnUM中定义的值之外,您将不能传递任何值(而任何无效的int值可以传递给一个以int作为参数的方法)。java中的< /p> < p> Enums不像C或C++中的枚举。它们本质上归结为类的静态实例。我相信您需要MENU_SEND_SMS.ordinal()
来实现现在的操作方式,但是如果将枚举作为一个类来使用,您可能会做得更好(如我链接的文档中的示例所示)
System.out.println(MENU_OPTIONS.MENU_ADD_SMS);