1

我对java esp相当陌生。到一些编码实践。我有一个方法抛出 aNullPointerException并且调用方法捕获它的情况。

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)抛出 aNullPointerException并且它被上面的 catch 捕获(如上)。相反,我想做类似的事情:

if (test == null) { do something else }

在 try 块内。

处理这个问题的最佳方法是什么?我可以删除 throw inside 方法并使其返回 null 吗?

4

4 回答 4

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;
        }

    }
于 2013-01-09T22:36:40.437 回答
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();
 }
于 2013-01-09T22:41:48.307 回答
0
try{
    Class.method(arg);
} catch ( NullPointerException npe ) {
    //do something else
}
于 2013-01-09T22:39:55.330 回答
0

您可以为以下内容指定一个 catch 子句NullPointerException

try {
    String test = Class.method(arg)
}
catch (NullPointerException ex) {
    // test == null
    // do something
}
catch (Exception ex) {
    // ?
}

但是您可能不想在catch子句中放置太多逻辑/行为,因此请考虑在if块之外放置一个类似于您建议的try-catch块:

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
 }
于 2013-01-09T22:41:11.520 回答