定性思维,初始化时定义一个不可变的变量
static final 于是 写出了如下程序,并进行测试
import java.util.HashMap;
import java.util.Map;
public class UnModifyMapTest {
private static final Map<String, Object> params = new HashMap<String, Object>();
static {
params.put("1", "1");
params.put("2", "2");
params.put("3", "3");
}
public static void main(String[] args) {
System.out.println(params.get("1"));
params.put("1", "modify");
System.out.println(params.get("1"));
}
}
运行结果:
1
modify
因为final修饰的map 不可以重新= new 对象,如果想让map中的元素不可修改,可通过java.util.Collections工具类进行修改
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class UnModifyMapTest {
private static Map<String, Object> params = new HashMap<String, Object>();
static {
params.put("1", "1");
params.put("2", "2");
params.put("3", "3");
params = Collections.unmodifiableMap(params);
}
public static void main(String[] args) {
System.out.println(params.get("1"));
params.put("1", "modify");
System.out.println(params.get("1"));
}
}
运行结果:
1
Exception in thread "main" java.lang.UnsupportedOperationException
但此时的map仍可被new称其他对象,可用final修饰,使其不可被修改
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class UnModifyMapTest {
private static final Map<String, Object> params;
static {
Map<String, Object> temp = new HashMap<String, Object>();
temp.put("1", "1");
temp.put("2", "2");
temp.put("3", "3");
params = Collections.unmodifiableMap(temp);
}
public static void main(String[] args) {
System.out.println(params.get("1"));
params = new HashMap<String, Object>();
System.out.println(params.get("1"));
}
}
此时无法被编译
The final field UnModifyMapTest.params cannot be assigned
其他集合也可通过Collections提供的方法进行此设置