java stx_java不可变对象 代码演示

二、不可变对象-Collections.unmodifiableXX map、list、set

代码示例(可以自行运行测试):

import com.google.common.collect.Lists;

import com.google.common.collect.Maps;

import lombok.extern.slf4j.Slf4j;

import java.util.Collections;

import java.util.List;

import java.util.Map;

/**

* 不可变对象-Collections.unmodifiableXX map、list、set

* @author stx

* @date 2018/5/16 14:14

* @desc

*/

@Slf4j

public class ImmutableExample1 {

private static Map map = Maps.newHashMap();

private static List list = Lists.newArrayList();

static {

map.put(1,"a");

map.put(2,"b");

map.put(3,"c");

map = Collections.unmodifiableMap(map);

list.add(1);

list.add(2);

list.add(3);

list = Collections.unmodifiableList(list);

}

public static void main(String[] args) {

log.info(String.valueOf(list.get(2)));

map.put(2, "bb");

log.info(map.get(2));

}

}

先贴下运行结果(list 执行成功,map 执行抛异常:UnsupportedOperationException)

16:19:51.162 [main] INFO com.yan.spring.springboot.example.ImmutableExample1 - 3

Exception in thread "main" java.lang.UnsupportedOperationException

at java.util.Collections$UnmodifiableMap.put(Collections.java:1457)

at com.yan.spring.springboot.example.ImmutableExample1.main(ImmutableExample1.java:38)

针对map的异常我们一起分析下,map对象执行这行代码之后

map = Collections.unmodifiableMap(map); 我们跟进unmodifiableMap的源码,发现这里new了一个新的UnmodifiableMap对象

public static Map unmodifiableMap(Map extends K, ? extends V> m) {

return new UnmodifiableMap<>(m);

}

而创建对象的类中除了读取方法基本都替换成如下实现:

throw new UnsupportedOperationException();

所以运行结果时map抛出了不支持操作的异常;那么我们平时使用不可变容器的时候就可以使用以上方式了。

这里没有提供set的示例,set使用:Collections.unmodifiableSet

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值