2013-04-20 45 views
0

我使用以下來定義組固定的常量枚舉不能用於固定常量?

private enum MENU_OPTIONS { 
    MENU_SEND_SMS, 
    MENU_COPY_SMS, 
    MENU_ADD_SMS, 
    MENU_POST_FACEBOOK, 
    MENU_TWEET 
} 

和I具有接受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

在Java中,枚舉更像是一個類的命名實例。enum類型是一種特殊的數據類型,它使變量成爲一組預定義的常量。 MENU_SEND_SMSMENU_OPTIONS的類型。這是原始int type.It不不起作用enums在其他語言中使用類似C的方式

三件事可以做:

1)更改參數的類型

menu.add (int, MENU_OPTIONS, int, String); 

2)如果仍然維持現有的方法定義:

menu.add (int, int, int, String); 

然後在voke爲:

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"); 
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());

現在,它會打印,所不同的方法。

或者,一般地,您可以更改該方法,以便它接受MENU_OPTION而不是int

3

enum是一個類。 MENU_OPTIONS.MENU_SEND_SMS的類型爲MENU_OPTIONS(因爲它是代表單個菜單選項的類,應該命名爲MenuOption)。從而

add()方法應該採取MenuOption類型和不int類型的參數的參數。這更安全一些,因爲它記錄了方法期望的結果(int比MenuOption更加模糊),並且因爲除了枚舉中定義的值之外,您將無法傳遞任何值(而任何無效的int值都可能是傳遞給以int爲參數的方法)。

2

Java中的枚舉不像C或C++中的枚舉。他們基本歸結爲一個類的靜態實例。 This article explains it well and with examples。我相信你現在需要的方式需要MENU_SEND_SMS.ordinal(),但是你可以通過像使用枚舉類一樣使用枚舉來做更好的工作(如我鏈接的文檔中的例子)

+0

+1 for ordinal ) – A4L 2013-04-20 15:39:07