如何创建一个public static final 类型的map 并能赋初值

hexudonghot1 2013-07-31 10:55:04
如何创建一个public static final 类型的map 并能赋初值,并且只能在初始化的时间赋值,而不能中途修改它的值如何设置?
...全文
2220 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
raistlic 2013-08-01
  • 打赏
  • 举报
回复
引用 4 楼 longtian1213 的回复:
按楼主的要求,就不能设置成final的,

	public static  Map<String,String> map = new HashMap<String,String>();
	static{
		map.put("1", "1");
		map = Collections.unmodifiableMap(map);
	}
像这样,如果在其他地方调用map.put就会抛出ava.lang.UnsupportedOperationException异常

	public static final Map<String,String> MAP;
	static{
                Map<String,String> m = new HashMap<String,String>()
		m.put("1", "1");
                MAP = Collections.unmodifiableMap(m);
	}
S117 2013-08-01
  • 打赏
  • 举报
回复
按楼主的要求,就不能设置成final的,

	public static  Map<String,String> map = new HashMap<String,String>();
	static{
		map.put("1", "1");
		map = Collections.unmodifiableMap(map);
	}
像这样,如果在其他地方调用map.put就会抛出ava.lang.UnsupportedOperationException异常
ghostkngiht 2013-08-01
  • 打赏
  • 举报
回复
对于被static和final修饰过的实例常量,实例本身不能再改变了,但对于一些容器类型(比如,ArrayList、HashMap)的实例变量,不可以改变容器变量本身,但可以修改容器中存放的对象。你的需求可能需要自己包装一个类来实现。
kitakyushu 2013-08-01
  • 打赏
  • 举报
回复

public static final Map<String,String> map = new HashMap<String,String>(){
{
put("a","1");
put("b","2");
}
};
hexudonghot 2013-08-01
  • 打赏
  • 举报
回复
private final static Map<String,String> kmap = new HashMap<String,String>(); static { kmap.put("key", "111111"); }
JPF1024 2013-07-31
  • 打赏
  • 举报
回复


网上看到的.

设置不可变集合:不可变集合对象只能访问不能修改

Collections有三类方法可返回一个不可变集合:

1、emptyXxx():返回一个空的不可变的集合对象

2、singletonXxx():返回一个只包含指定对象的,不可变的集合对象。

3、unmodifiableXxx():返回指定集合对象的不可变视图

public static void main(String[] args) {
  //创建一个空的,不可变的List对象
  List unmodList =Collections.emptyList();
  //创建一个只有一个元素且不可变的set对象
     Set unmodSet =Collections.singleton("唯一的");
     Map a=new HashMap();
     a.put("语文", 80);
     a.put("java", 90);
     //返回map对象对应的不可变版本
     Map unmodMap =Collections.unmodifiableMap(a);
     //以下代码都将引发UnsupportedOperationException异常
     unmodList.add("hello");
     unmodSet.add("kitty");
     unmodMap.put("语文", 70) 
 }



另外,你需要注意:假如Map里面放的是引用类型数据[比如对象],不可变性可能会发生改变.
iLemon 2013-07-31
  • 打赏
  • 举报
回复
public static final Map<String,String> map=new HashMap<String, String>();
	static{
		map.put("1", "a");
		map.put("2", "b");
		map.put("3", "c");
	}
	
	public static void main(String[] args) {
		System.out.println(map);
	}

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧