在实际工作中,有一个集合,我们期望是只读的,不可修改。比如,从远程配置中心中拉取的配置,运行中,我们只可以调用read
相关方法,不可调用write
相关方法。
如何从代码机制上,而不是人为认知上拒绝write
误调用呢?
创建不可修改集合视图
/**
* 集合视图
*/
public class CollectionView {
/**
* 白名单
*/
private Set<String> whiteSet;
/**
* eg:初始化时从配置中心拉取最新的配置赋给whiteSet;
* whiteSet是只读的,不可修改
*
* 使用Collections.unmodifiableSet获取只读视图
* 防止用户在使用过程中修改容器
*/
private void init(){
//模拟拉取远程配置到本地
Set<String> temp = new HashSet<>();
temp.add("91793y8");
whiteSet = Collections.unmodifiableSet(temp);
}
public Set<String> getWhiteSet() {
return whiteSet;
}
public static void main(String[] args) {
CollectionView view = new CollectionView();
view.init();
Set<String> whiteSet = view.getWhiteSet();
//java.lang.UnsupportedOperationException
whiteSet.add("19793");
}