4

这是一段代码。

  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 块返回某个值还是使用正确?

4

7 回答 7

10

这段代码是正确的,看起来并不可疑。当解析失败时(请注意,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;
        }
    }
于 2012-07-26T07:51:47.570 回答
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;
}
于 2012-07-26T07:59:03.157 回答
2

我相信如果你知道你想要返回什么就可以了。如果我可以提示您使用的退出(返回)数量。我会使用一个布尔字段,然后在 try / 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;
  }
于 2012-07-26T07:56:40.233 回答
1

你可以在 catch 块中返回一些值,甚至在 finally 块中。

完全没问题。

于 2012-07-26T07:52:16.860 回答
1

如果其中一个条件应该CheckTermlNumber整数,那么您的代码是可以的,但是如果您期望lNumber是整数而事实并非如此,则最好抛出异常。

于 2012-07-26T07:52:31.070 回答
1

就好像我会以不同的方式捕获异常一样。

您调用的那个方法会引发NumberFormatException

似乎只返回 false 就可以了,我会做一些日志记录来跟踪异常,尽管讨论了如何处理你的异常

于 2012-07-26T07:53:03.850 回答
1

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

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;}
于 2012-07-26T08:06:41.230 回答