2014-03-19 76 views
0

我有一個枚舉一些變量Java變量,由於某種原因不得不開始用「@」,例如:開始與@(「at」符號)

public enum PR304MainDb { 
    @MODE, 
    @USERID, 
    @ROLES, 
    @MAX_DOC_COUNT 
} 

我使用這些方式變量是把它們放在一個HashMap中...

Map<String, Object> in = new HashMap<String, Object>(); 
in.put([email protected](), 5); 

...然後調用存儲過程(其中的代碼,我不能改變)時使用的HashMap作爲參數。

而且通話後,我讀的結果,並做了一些比較,如:

if (out.getKey().equals([email protected]_DOC_COUNT.toString())) { 
//DO SOMETHING 
} 

我知道,這些名稱是無效,但有沒有做到這一點任何其他方式?

+0

您可能想要考慮帶枚舉鍵的HashMap是否實際上是正確的工具。無論如何,我已經回答了這個問題。 – immibis

回答

5

是的,有一種方法 - 不要使用枚舉常量名稱(不要使用YOUR_CONSTANT.toString()作爲名稱)。

枚舉和其他類一樣,可以有字段和方法。一些可能性:

public enum PR304MainDb_Possibility1 { 
    MODE("@MODE"), 
    USERID("@USERID"), 
    ROLES("@ROLES"), 
    MAX_DOC_COUNT("@MAX_DOC_COUNT"); 

    private PR304MainDb_Possibility1(String text) { 
     this.text = text; 
    } 

    public final String text; 
} 

public enum PR304MainDb_Possibility2 { 
    MODE, 
    USERID, 
    ROLES, 
    MAX_DOC_COUNT; 

    public String getText() {return "@" + name();} 
} 
+0

這是什麼名字()函數? –

+0

返回枚舉常量的名稱,與toString相同。該文檔說,當你想要的確切名稱時使用名稱,當你想要顯示給用戶的時候toString。他們必須有*理由*這樣說 - 也許他們會改變未來的工作方式。 – immibis

3

你不能在符號名稱中使用@,但你可以做的是過度乘坐toString方法:

public enum PR304MainDb { 
    MODE, 
    USERID, 
    ROLES, 
    MAX_DOC_COUNT; 


    @override 
    String toString() { 
     return "@"+super.toString(); 
    } 
} 

你也可以做到這一點不使用的toString ()方法爲此目的定義一個新的方法,但這將涉及更改使用枚舉的代碼。