2012-07-26 71 views
3

这是一段代码。异常使用的错误使用 - 从捕获返回值

private boolean CheckTerm() 
     { 
      String str = lGskCompoundNumber; 
      if (lPrefix.trim() == "" || lNumber.trim() == "") 
       return false; 

      try 
      { 
       Integer.parseInt(lNumber); 
      } 
      catch (Exception ex) 
      { 
       return false; 
      } 
      if (lHasAmpersand) 
       str = lGskCompoundNumber.replace("&", ""); 
      return str.equals(lPrefix + lInitSep + lNumber + lEndSep + lSuffix); 
     } 

我应该从catch块返回一定的值还是使用权?

+0

你是什么意思“我应该从catch block返回某个值”,返回到哪里? – 2012-07-26 07:47:59

+0

我想他是问你是否应该在'catch'块中使用'return'关键字。我认为那很好。 – Autar 2012-07-26 07:50:22

回答

9

此编码是正确的,看起来不可疑。解析失败时(请注意,您应该捕获最窄的异常,在这种情况下为NumberFormatException),整个验证失败,因此您要返回false。否则,您正在执行额外的检查(在catch块之后)并返回结果。这段代码很好。

如果你觉得有点难以阅读,请考虑以下的重构:

private boolean checkTerm() { 
    try 
     { 
      String str = lGskCompoundNumber; 
      if (lPrefix.trim() == "" || lNumber.trim() == "") 
       return false; 
      Integer.parseInt(lNumber); 
      if (lHasAmpersand) 
       str = lGskCompoundNumber.replace("&", ""); 
      return str.equals(lPrefix + lInitSep + lNumber + lEndSep + lSuffix); 
     } 
     catch (NumberFormatException ex) 
     { 
      return false; 
     } 
    } 
1

可以返回catch块一定的价值,甚至在finally块。

这完全没问题。

1

如果CheckTerm的条件之一是lNumber应该是一个整数,那么你的代码是好的,但如果你期望lNumber是一个整数,它不是,你最好抛出一个异常。

2

我认为,这是好的,如果你知道你想要返回什么。 如果我可以给出你使用的退出(退货)数量的提示。 我会用一个布尔值属性,只是在尝试后返回一次/ catch块

private boolean CheckTerm() 
{ 
    boolean b = true; 
    String str = lGskCompoundNumber; 
     if (lPrefix.trim() == "" || lNumber.trim() == "") 
      b = false; 

     try 
     { 
      Integer.parseInt(lNumber); 
     } 
     catch (Exception ex) 
     { 
      b = false; 
     } 
     if (lHasAmpersand) 
      str = lGskCompoundNumber.replace("&", ""); 
     b = str.equals(lPrefix + lInitSep + lNumber + lEndSep + lSuffix); 
     return b; 
    } 
+0

+1我不是一个方法中多个return语句的粉丝 – 2012-07-26 07:58:02

3

没有什么错在你的代码,但我总是喜欢在我的方法单一出口点,所以我更喜欢写东西像:

private boolean CheckTerm() 
{ 
    boolean res = false; 
    String str = lGskCompoundNumber; 
    if (lPrefix.trim() == "" || lNumber.trim() == "") 
    { 
    } 
    else 
    { 
     try 
     { 
      Integer.parseInt(lNumber); 
      if (lHasAmpersand) 
       str = lGskCompoundNumber.replace("&", ""); 
      res = str.equals(lPrefix + lInitSep + lNumber + lEndSep + lSuffix); 
     } 
     catch (NumberFormatException ex) 
     { 
     } 

    } 
    return res; 
} 
1

如果你怕没有默认返回,最后使用,然后返回一些东西。

try 
    { 
     Integer.parseInt(lNumber); 
     if (lHasAmpersand) 
      str = lGskCompoundNumber.replace("&", ""); 
     res = str.equals(lPrefix + lInitSep + lNumber + lEndSep + lSuffix); 
    } 
    catch (NumberFormatException ex) 
    { 
     return false; 
    }finally{return false;}