实践中的重构12_不要乱用异常

code review的时候,发现了如下代码。

	/**
* 验证一个字符串是一个长度为10,且内容都是数字。
* */
public static boolean validate(String str) {
if (str == null || str.length() != 10) {
return false;
}

// 纯数字
try {
Long.valueOf(str);
} catch (NumberFormatException ex) {
return false;
}

return true;
}

第一反应是异常这么用,好奇怪。异常不应该这么用的啊,也许是为了图省事吧。
但是还是应该把异常用在异常情况下,而不是这么误用。这个用法和用异常判断文件的结束没有什么太大的区别。

仔细看了看,不仅仅是异常用的比较奇怪,这个方法是有漏洞的。
明明方法接口的约定是判断长度和数字,但是因为是用Long的valueOf方法,通过异常来实现,结果像"-100000000"这样本来不合法的字符串可以通过这个校验了。

重构后代码如下,直白的完成该方法的接口约定。

	/**
* 验证一个字符串是一个长度为10,且内容都是数字。
* */
public static boolean validate2(String str) {
if (str == null || str.length() != 10) {
return false;
}

char[] data = new char[str.length()];

str.getChars(0, str.length(), data, 0);

for (int i = 0; i < data.length; i++) {
char c = data[i];
if (c < '0' || c > '9') {
return false;
}
}

return true;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值