欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-31 08:19:18
...
写代码,一定要对自己写的(维护的)每一行代码都进行深入的研究。写程序本来就是一个很细致的活儿,粗心大意和自以为是的猜测都是在给后人或自己挖坑。
简单的一个布尔值装箱,都有可能是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 编程