java中有什么方法可以处理方法参数/内部错误?
所有这三种方法都做同样的事情,第二种方法有一点不同,其中例外也有“由...引起”。
请注意,在第三种方法中,每次我想退出时都必须重复返回。
还要考虑java中的异常处理是非常昂贵的(我已经在某处读过)。
谢谢!
public static String method(String arg) {
block: {
if (arg == null) {
logger.error("arg is null");
break block;
}
try {
...
return "ok";
} catch (Exception e)
logger.error("help!", e);
}
}
return "ko";
}
public static String method(String arg) {
try {
if (arg == null) {
throw new Exception("arg is null");
}
...
return "ok";
} catch (Exception e) {
logger.error("help!", e);
return "ko";
}
}
public static String method(String arg) {
String result = "ko";
if (arg == null) {
logger.error("arg is null");
return result;
}
try {
..
result = "ok";
} catch(Exception e) {
logger.error("help!", e);
}
return result;
}
编辑: 另外,在第二种方法中,您可以使用RuntimeException(或自定义错误)区分内部方法错误,这是个坏主意吗?
答案 0 :(得分:1)
我不认为"对"方式是这3个中的任何一个。
Java只有一个例外,名为IllegalArgumentException的无效参数,实际上是RuntimeException,所以你不要声明它。这个想法是,如果你提供一个非法的参数,这是调用方的一个错误,所以调用者必须捕获并处理异常。
当您的方法返回"非法"的有效结果时论证,IMO,你的论点并不是非法的,所以不应该是一个例外,然后就没有什么可以从中恢复的。因此,您的代码应该看起来像
public static String method(String arg) {
return arg==null?"ko":"ok";
}
这里没有例外。
现在,如果null参数是您必须处理的特殊情况,我认为正确的方法是在调用方处理它。在JDK中,您将找到显式和隐式无效参数异常的示例,例如:
显
* @param s the string to be parsed.
* @return a {@code Double} object holding the value
* represented by the {@code String} argument.
* @throws NumberFormatException if the string does not contain a
* parsable number.
*/
public static Double valueOf(String s) throws NumberFormatException {
return new Double(FloatingDecimal.readJavaFormatString(s).doubleValue());
}
隐
* @param uri
* the URI to convert
*
* @return the resulting {@code Path}
*
* @throws IllegalArgumentException
* if preconditions on the {@code uri} parameter do not hold. The
* format of the URI is provider specific.
(...)
*/
public static Path get(URI uri) {
String scheme = uri.getScheme();
if (scheme == null)
throw new IllegalArgumentException("Missing scheme");
(...)
我认为这里的整个想法是
这就是我的想法。
答案 1 :(得分:0)
第一个,使它更优雅,但第三个更容易阅读,更不容易出错。
答案 2 :(得分:-1)
您应该使用最容易阅读的那个。请记住,代码只写一次并多次读取。
第三个是最容易阅读的。
另一条非常好的规则。每种方法都有一个条目。 最好只使用一个return语句。
原因是下一位读者更容易理解代码的想法。
有关此类问题的更多信息,请参阅清洁代码http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
建议存在一个入境解决方案:
public static String method(String arg) {
String outString = "ko";
try {
if (arg != null) {
outString = "ok";
} else {
logger.debug("arg is null");
}
} catch (Exception e) {
logger.error("Help!", e);
}
return outString;
}