阅读Selenium源码——ImmutableMap

今天在学习Selenium源码时发现在创建存储Capabilities的map时利用了ImmutableMap这个对象。

不可变集合,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。

为什么要用immutable对象?immutable对象有以下的优点:


1.对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象
2.线程安全的:immutable对象在多线程下安全,没有竞态条件
3.不需要支持可变性, 可以尽量节省空间和时间的开销. 所有的不可变集合实现都比可变集合更加有效的利用内存 (analysis)
4.可以被使用为一个常量,并且期望在未来也是保持不变的

immutable对象可以很自然地用作常量,因为它们天生就是不可变的对于immutable对象的运用来说,它是一个很好的防御编程(defensive programming)的技术实践。

这里用的是Guava的immutable集合,因为java自带的Collections.unmodifiableXXX系列方法并不好用。

下面是测试代码:


package SeleniumReader;

import java.util.Map;

import com.google.common.collect.ImmutableMap;

public class immutableMap {

	public static void main(String args[]){
		immutableTest();
	}
	
	public static void immutableTest(){
		
		    ImmutableMap.Builder<String, String> paramBuilder =
		        new ImmutableMap.Builder<>();
		    paramBuilder.put("desiredCapabilities", "desiredCapabilities");
		    paramBuilder.put("requiredCapabilities", "requiredCapabilities"); 
		    Map<String, ?> parameters = paramBuilder.build();
		    
		    paramBuilder.put("neededCapabilities", "neededCapabilities");
		    ImmutableMap<String, String> map = paramBuilder.build();
		    
		    for(Map.Entry<String, ?> entry : parameters.entrySet()){    
		        System.out.println(entry.getKey()+"--->"+entry.getValue());    
		    }   
		    for(Map.Entry<String, String> entry : map.entrySet()){    
		        System.out.println(entry.getKey()+"--->"+entry.getValue());    
		   }   
		
	}
	
}

注:import中的com.google.common.collect.ImmutableMap包含在guava.jar中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值