我是java esp的新手。一些编码实践。我有一种情况,方法抛出NullPointerException
并且调用方法捕获它。
try {
String test = Class.method(arg)
}
catch (Exception ex) {
...
}
public String method(arg){
String str;
...
if(str == null) throw(exception)
return str;
}
现在Class.method(arg)
内的某个方法会抛出一个NullPointerException
,它会被上面的捕获(如上所述)捕获。相反,我想做类似的事情:
if (test == null) { do something else }
在try块内。
处理此问题的最佳方法是什么?我可以删除throw inside方法并使其返回null吗?
答案 0 :(得分:3)
您应该在method(arg)
中捕获异常,并在任何异常情况下返回null
。
示例程序:
public class Test1 {
public static void main(String[] args) {
try{
String test = method("1");
if(test==null){
//do something else
}
}catch(Exception e){
}
}
private static String method(String str) throws Exception{
if(str.equals("1")) return null;
else if(str.equals("2")) throw new Exception("My Exception");
else return str;
}
}
现在你可以将方法改为这样的,这完全取决于你的要求:
private static String method(String str) throws Exception{
try{
if(str.equals("1")) return null;
else if(str.equals("2")) throw new Exception("My Exception");
else return str;
}catch(Exception e){
return null;
}
}
答案 1 :(得分:3)
期待空指针异常有一些难闻的气味。是不是可以在method
中添加空测试并返回约定的结果而不等待例外?
所以而不是
public String method(String arg) {
try {
return arg.toString();
} catch (NullPointerException npe) {
return null;
}
}
你真的应该这样做
public String method(String arg) {
if (arg == null) {
return null;
}
return arg.toString();
}
一个可观的替代方案是抛出除NPE之外的异常来提示问题 - 并且因为返回null
通常是一个坏主意:
public String method(String arg) {
if (arg == null) {
throw new IllegalArgumentException("Passing null is illegal");
}
return arg.toString();
}
答案 2 :(得分:0)
try{
Class.method(arg);
} catch ( NullPointerException npe ) {
//do something else
}
答案 3 :(得分:0)
您可以特别为NullPointerException
指定一个catch子句:
try {
String test = Class.method(arg)
}
catch (NullPointerException ex) {
// test == null
// do something
}
catch (Exception ex) {
// ?
}
但是您可能不希望在catch
子句中放置过多的逻辑/行为,因此请考虑将if
块放在try-catch
块之外的那个块中:< / p>
try {
String test = Class.method(arg)
}
catch (NullPointerException ex) {
// At least log the exception; never swallow exceptions. NEVER.
System.out.println(ex);
}
catch (Exception ex) {
// ?
}
if(test != null) {
// do something
}
else {
// do something else
}