在java中将映射定义为常量

Wou*_*ter 9 java android

对于我的Android应用程序,我需要在一个常量中定义一些键,我认为最好的方法是使用地图.但不确定这是否真的是要走的路,以及如何正确地做到这一点.由于我的目标是Android,因此Bundle也可能是一种选择.

我有一个键列表,如:
"h"="http"
"f"="ftp"

基本上该程序是读取QR代码(以防止代码变得太大,我使用的是超短键),获取这些密钥,并且必须将它们转换为有用的东西,在我的情况下是协议.

我正在尝试定义一个名为KEY_PROTOCOLS的常量,我认为这应该是一个Map,所以稍后我可以调用类似KEY_PROTOCOLS.get("f")的东西来获得属于键"f"的协议.

其他类也应该能够导入这个常量,并使用它.所以这张地图必须立即在课堂上填充.

我怎样才能做到这一点?

JB *_*zet 21

如果常量由多个类共享,并且如果要确保某些代码不清除或修改此映射,则最好使其不可修改:

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);
}
Run Code Online (Sandbox Code Playgroud)

  • +1使其无法修改.如果OP使用的是Guava库,他们也可以使用`ImmutableMap`.`public static final ImmutableMap <String,String> KEY_PROTOCOLS = ImmutableMap.of("f","ftp");` (2认同)