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短信属于
菜单选项
类型。它不是primitive
int
类型。它不像其他语言(如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);