2011-06-26 41 views
8

對於我的Android應用程序,我需要在單個常量中定義一些鍵,我認爲最好的方法是使用映射。但不知道這是否是真正的方法,以及如何正確地做到這一點。由於我針對Android,Bundle也可能是一個選項。在java中定義映射爲常量

我有這樣的鍵的列表:
「H」 =「HTTP」
「F」 =「FTP」

基本上程序是讀取的QR碼(以保持該代碼從生長太大,我使用超短鍵),獲取這些密鑰,並且必須將它們翻譯成有用的東西,在我的情況下是協議。我想要定義一個常量叫做KEY_PROTOCOLS,我認爲這應該是一個Map,所以後面我可以調用類似KEY_PROTOCOLS.get(「f」)來獲得屬於鍵「f」的協議。

其他類也應該能夠導入這個常量,並使用它。所以這張地圖必須在課堂上填寫。

我該怎麼做?

+1

參見:http://stackoverflow.com/questions/507602/how-to-initialise-a-static-map-in-java – Kaarel

回答

17

如果常量是由幾個類共享,如果你想確保這個地圖是不是通過一些代碼清除或修改,您最好使其不可修改:

public static final Map<String, String> KEY_PROTOCOLS; 

static { 
    Map<String, String> map = new HashMap<String, String>(); 
    map.put("f", "ftp"); 
    // ... 
    KEY_PROTOCOLS = Collections.unmodifiableMap(map); 
} 
+1

+1使其不可修改。如果OP使用Guava庫,他們也可以使用'ImmutableMap'。 'public static final ImmutableMap KEY_PROTOCOLS = ImmutableMap.of(「f」,「ftp」);' – Tom

+0

第一個答案很好,這個更好,所以這個是我的「接受」答案。謝謝! – Wouter

0

這將工作。

static Map<String, String> map = new HashMap<String, String>(); 

static { 
    map.add("ftp", "ftp"); 
    ... 
} 
2

事情是這樣的:

private static final Map<String, String> KEY_PROTOCOLS = new HashMap<String, String>(); 
static{ 
    KEY_PROTOCOLS.put("f", "ftp"); 
    // More 

} 

靜態Initialisers:

http://www.glenmccl.com/tip_003.htm

0

在Android上:

@SuppressWarnings("unchecked") 
Pair<String,String>[] pre_ips=new Pair[]{new Pair<String,String>("173.194", "0"), new Pair<String,String>("74.125", "96")}; 
String ip_1_2,ip_3; 
for (Pair<String,String> pre_ip:pre_ips) 
    {ip_1_2=pre_ip.first; 
    ip_3=pre_ip.second; 
    }