2012-07-26 70 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;}