iteye_19575
2010-01-06 16:32
浏览 238
已采纳

j2se源码部分阅读疑问

我看到以下代码,对API中处理int类型的最小值Integer.MIN_VALUE用NumberFormatException捕获异常的方式来处理感到无法理解.
请高手们给予解释.怎么能用捕获异常的方式来处理这个边界值.这个有违设计理念吧?
[code="java"] public static Integer decode(String nm) throws NumberFormatException {
int radix = 10;
int index = 0;
boolean negative = false;
Integer result;

    // Handle minus sign, if present
    if (nm.startsWith("-")) {
        negative = true;
        index++;
    }

    // Handle radix specifier, if present
if (nm.startsWith("0x", index) || nm.startsWith("0X", index)) {
    index += 2;
        radix = 16;
}
else if (nm.startsWith("#", index)) {
    index ++;
        radix = 16;
}
else if (nm.startsWith("0", index) && nm.length() > 1 + index) {
    index ++;
        radix = 8;
}

    if (nm.startsWith("-", index))
        throw new NumberFormatException("Negative sign in wrong position");

    try {
        result = Integer.valueOf(nm.substring(index), radix);
        result = negative ? new Integer(-result.intValue()) : result;
    } catch (NumberFormatException e) {
        // If number is Integer.MIN_VALUE, we'll end up here. The next line
        // handles this case, and causes any genuine format error to be
        // rethrown.
        String constant = negative ? new String("-" + nm.substring(index))
                                   : nm.substring(index);
        result = Integer.valueOf(constant, radix);
    }
    return result;
}[/code]

[b]问题补充:[/b]
我的意思是...为什么要用捕获异常的方式来解决这个问题.而不是在方法内部直接判断.

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • bx~liu 2010-01-11 22:38
    已采纳

    我的理解是这种情况很少出现(指解析-(2^31)),单为这个数写个判断在绝大多数情况下没有必要,反而影响性能,用异常来处理更合理。
    异常就应该处理很少出现的情况

    已采纳该答案
    打赏 评论
  • weixin_42519818 2010-01-06 19:24

    public static Integer decode(String nm)你看看传进来的是什么?
    String,有这个东西就要考虑到有人传的不是数字。

    打赏 评论
  • supperhpxd 2010-01-12 15:55

    我觉得这种问题上就是各说各的理,各有优缺点,没有绝对的,谁也没说java的api一定就是写的最正确

    打赏 评论

相关推荐 更多相似问题