实践中的重构19_脱裤子放屁

每当看到代码中有一个明显的冗余的时候,我就有一个感慨,这家伙时间真多啊,放个屁还要脱裤子。
看例子。
		if (addressCode != null
				&& (StringUtil.equals(addressCode, HK)
						|| StringUtil.equals(addressCode, MACAO)
						|| StringUtil.equals(addressCode, TAIWAN) || StringUtil
						.equals(addressCode, OTHER))) {
			// do something.
		} else {
			// do something.
		}

其中StringUtil是一个null safe的方法,HK,MACAO,TAIWAN都是常量定义,后面明明有判断相等的逻辑,偏偏要在前面做一个null检查,真是多此一举。
		if (StringUtil.equals(addressCode, HK)
				|| StringUtil.equals(addressCode, MACAO)
				|| StringUtil.equals(addressCode, TAIWAN)
				|| StringUtil.equals(addressCode, OTHER)) {
			// do something.
		} else {
			// do something.
		}

直接去掉不是挺好的吗?
同时,从这里使用常量的方式可以推测,有可能其他地方也有基于比较的用法。代码文件往下一拉,果不其然。
		if (StringUtil.equals(addressCode, HK)) {
			return "中国香港";
		}
		if (StringUtil.equals(addressCode, MACAO)) {
			return "中国澳门";
		}
		if (StringUtil.equals(addressCode, TAIWAN)) {
			return "中国台湾";
		}
		if (StringUtil.equals(addressCode, OTHER)) {
			return "其它国家/地区";
		}

两处放在一起考虑,使用map来存储addressCode和地址描述字符串就是一个水到渠成的事情了。
第一处的代码可以改为:
		if (addressMap.containsKey(addressCode)) {
			// do something.
		} else {
			// do something.
		}

第二处的代码可以改为:
		if (addressMap.containsKey(addressCode)) {
			return addressMap.get(addressCode);
		}

当然,这里addressCode对应的描述信息应该从配置文件里面读取比较好。但是由于不是本文关注的重点,不赘述。

你可能感兴趣的:(java)