我使用以下来定义固定的常量集
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?
答案 0 :(得分:3)
枚举是一个类。 MENU_OPTIONS.MENU_SEND_SMS
的类型为MENU_OPTIONS
(因为它是表示单个菜单选项的类,因此应命名为MenuOption
)。
因此,add()
方法应采用MenuOption
类型的参数,而不是int
类型的参数。这样更安全,因为它记录了方法所期望的内容(int比MenuOption更模糊),并且因为除了枚举中定义的值之外你将无法传递任何值(而任何无效的int值都可能是传递给一个以int作为参数的方法。
答案 1 :(得分:2)
java中的枚举与C或C ++中的枚举不同。它们基本上归结为类的静态实例。 This article explains it well and with examples。我相信你现在的方式需要MENU_SEND_SMS.ordinal()
,但你可以通过使用枚举作为一个类来做得更好(就像我链接的文档中的例子一样)
答案 2 :(得分:1)
System.out.println(MENU_OPTIONS.MENU_ADD_SMS);
它会打印 MENU_ADD_SMS (类型为MENU_OPTIONS
)
您可能希望使用 ordinal() 从ENUM
获取int值:
System.out.println(MENU_OPTIONS.MENU_ADD_SMS.ordinal());
现在它将打印 2 ,作为方法除外。
或者,在所有情况下,您可以更改方法,使其接受MENU_OPTION
而不是int
。
答案 3 :(得分:0)
在Java中,枚举更像是类的命名实例。enum类型是一种特殊的数据类型,它使变量成为一组预定义的常量。 MENU_SEND_SMS
的类型为MENU_OPTIONS
。它不是原始int
类型。它不像{C}在其他语言中使用的方式那样工作。
你可以做三件事:
1)更改参数类型
enums
2)如果您仍然支持现有的方法定义:
menu.add (int, MENU_OPTIONS, int, String);
然后调用:
menu.add (int, int, int, String);
3)将枚举定义为:
MENU_OPTIONS option = MENU_OPTIONS.MENU_SEND_SMS
menu.add(0, option.ordinal(), 0, "someString");
并将其用作:
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;
}
}