实践中的重构04_了解每一行代码 装箱的布尔值(new)

写代码,一定要对自己写的(维护的)每一行代码都进行深入的研究。写程序本来就是一个很细致的活儿,粗心大意和自以为是的猜测都是在给后人或自己挖坑。
简单的一个布尔值装箱,都有可能是bug的根源。
Code review的时候,发现一段代码如下:
Boolean isNeedProxy = (Boolean)threadLocalMap.get(ip); 
return ( isNeedProxy ==  Boolean.TRUE ) ? true : false;
我的猜想是编程的人为了防止isNeedProxy为null,所以有了这段代码。
这里有个问题。如果存储的值是new出来的Boolean,那么这里的逻辑就是错的。
Boolean b = new Boolean("true");  
Assert.assertFalse(b == Boolean.TRUE);  

发现了这个问题,改正起来当然是比较容易的。
return isNeedProxy==null?false:isNeedProxy;

本来故事到了这里就结束了,但是,仔细想想,对于这种比较细微的代码级别问题,别人一样是很容易犯错的。还是应该把这个细微的东西封装起来比较好。
代码如下:
	private Map<String, Boolean> map = new HashMap<String, Boolean>();

	public void put(String key, boolean value) {
		map.put(key, value);
	}

	public boolean getValue(String key) {
		Boolean value = map.get(key);

		if (value == null) {
			return false;
		}

		return value.booleanValue();
	}

你可能感兴趣的:(java,编程)