在Java中将一个map定义为常量

10
对于我的Android应用程序,我需要在一个常量中定义一些键,并且我认为最好的方法是使用Map。但不确定这是否真的是正确的方法以及如何正确地执行。由于我正在针对Android,Bundle也可能是一种选择。
我有一个键列表,例如: "H"=“http” "F"=“ftp”
基本上,程序要读取QR码(为了避免该代码变得太大,我使用超短键),获取这些键,并将它们转换为有用的东西,例如协议。
我试图定义名为KEY_PROTOCOLS的常量,我认为这应该是一个Map,因此以后可以调用类似KEY_PROTOCOLS.get(“f”)的内容来获取属于键“f”的协议。
其他类还应该能够导入此常量并使用它。因此,必须立即在该类中填充此映射。
如何做到这一点?

1
请参见:https://dev59.com/1nRB5IYBdhLWcg3wyqOo - Kaarel
4个回答

26
如果该常量被多个类共享,且你想确保该映射不会被某些代码清除或修改,最好将其设置为不可修改的:
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);
}

3
+1 表示希望将其变为不可修改的。如果 OP 正在使用 Guava 库,他们也可以直接使用 ImmutableMappublic static final ImmutableMap<String, String> KEY_PROTOCOLS = ImmutableMap.of("f", "ftp"); - Tom
第一个答案很好,这个更好,所以这个是我“采纳”的答案。谢谢! - Wouter

3

类似这样:

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

}

静态初始化器:

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


0

这个可以运行。

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

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

0

在安卓上:

@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;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接