这是一段代码。
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 :(得分: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 :(得分: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;
}
答案 2 :(得分:2)
我相信如果你知道你想要回归什么就没问题。 如果我可以提供您使用的退出(退货)数量的提示。 我会使用一个布尔字段,然后在try / catch Block
之后返回一次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;
}
答案 3 :(得分:1)
你可以在catch块中返回一些值,甚至在finally块中返回。
完全可以。
答案 4 :(得分:1)
如果CheckTerm
的一个条件是lNumber
应该是一个整数,那么你的代码就可以了,但如果你期望lNumber
是一个整数而它不是,你最好抛出异常。
答案 5 :(得分:1)
虽然我会以不同的方式捕捉异常,但它很好。
您的通话方法会抛出NumberFormatException
好像只是返回false就好了,我会做某种日志来跟踪异常discussion on how to handle your exception答案 6 :(得分: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;}