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_OPTIONS.MENU_SEND_SMS”时,它会报告错误

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)

那么如果我想使用一组固定的常量,我应该如何定义 ENUM?

4

4 回答 4

3

枚举是一个类。MENU_OPTIONS.MENU_SEND_SMSis的类型MENU_OPTIONS(因为它是一个代表单个菜单选项的类,所以应该命名为MenuOption)。

因此,您的add()方法应该采用 type 参数MenuOption而不是 type 参数int。这更安全,因为它记录了方法的期望(int 比 MenuOption 模糊得多),并且因为除了枚举中定义的值之外,您将无法传递任何值(而任何无效的 int 值可能是传递给以 int 作为参数的方法)。

于 2013-04-20T15:33:56.253 回答
2

java 中的枚举与 C 或 C++ 中的枚举不同。它们本质上归结为一个类的静态实例。这篇文章很好地解释了它并带有示例。我相信你需要MENU_SEND_SMS.ordinal()你现在这样做的方式,但你可能会通过像他们一样使用枚举作为一个类来做得更好(如我链接的文档中的示例)

于 2013-04-20T15:36:06.143 回答
1

在 Java 中,枚举更像是类的命名实例。枚举类型是一种特殊的数据类型,它使变量能够成为一组预定义的常量。MENU_SEND_SMS是类型MENU_OPTIONS。它不是原始类型。它不像 C 等其他语言中使用的那样int工作。enums

你可以做三件事:

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");
于 2013-04-20T15:32:20.160 回答
1
System.out.println(MENU_OPTIONS.MENU_ADD_SMS); 

它将打印MENU_ADD_SMS(类型MENU_OPTIONS

您可能希望ENUM通过使用ordinal()从 中获取 int 值:

System.out.println(MENU_OPTIONS.MENU_ADD_SMS.ordinal());

现在它将打印2,作为方法除外。

或者,头韵,您可以更改方法,以便它接受 anMENU_OPTION而不是int.

于 2013-04-20T15:32:58.470 回答