2011-06-26 40 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; 
    }