Java期望为null,抛出异常

时间:2016-01-07 14:54:48

标签: java null

我一直试图找到一个很好的解决方案来解决这个问题2个小时,但我没有找到任何有用的东西。

我有从mantisApi获取IssueData的方法,以便稍后在代码中使用。它还会捕获抛出的任何异常:

try {
     IssueData issue = mantisApi.getIssue(issueId, user);
     task = prepareMantisTask(issue);
    } catch (Exception e) {
     System.out.println(e.getMessage());
    }
    return task;

问题是当我得到IssueData时我期望null,因为它可能是一个空字段。但是当它返回时,会在此try / catch块中捕获异常。我试图忽略使用以下代码:

public String getProjectNotNull(MantisTask mantisTask) {
    if (mantisTask == null){
        return null;
    }
    try{
    String project = mantisApiCache.getProject(mantisTask.getProject()).getName();
        return project;
    }
    catch(NullPointerException npe){
    log.info("TaskService.getProjectNotNull() throws controled null");
    return "-";
}

但是当我有20个或更多的记录需要检查时,它看起来很愚蠢。有没有其他方法可以忽略空值?谢谢你的时间。

对不起,我现在在家,我无法复制代码。 prepareMantisTask看起来像:

MantisTask mantisTask;
mantistask.setId = issue.getId();

这样的例子。如果我做mantistask.setDueData = issue.getDueData();它为null,因为并非所有问题都有此参数。因此,当调试器到达此点时,它将返回

} catch (Exception e) {
         System.out.println(e.getMessage()); 
} 

并将prepareMantisTask保留为任务null。

这两段代码来自我程序的不同部分,我只想展示它是如何工作的。

1 个答案:

答案 0 :(得分:1)

为什么不进行空检查而不是等待例外? 也许是这样的:

public String getProjectNotNull(MantisTask mantisTask) {
    if (mantisTask == null){
        return null;
    }

    String project = "-";

    // check whatever may be null here
    if (mantisTask.getProject() != null
        && mantisApiCache.getProject(mantisTask.getProject()) != null)  {

        project = mantisApiCache.getProject(mantisTask.getProject()).getName();

    } else {
        log.info("TaskService.getProjectNotNull() throws controled null")
    }

    return project;
}

修改

为了响应您的编辑,该规则仍然可以维护。如果不是所有问题都有该参数,则必须先检查它,以便永远不会出现异常,因为某些内容为空。

假设null指针异常是由issue.getDueData()引起的,那么你也可以这样做:

    if (issue.getData() != null) {
        mantistask.setDueData = issue.getDueData()
    }

这样你就不会在第一种情况下得到空指针异常。

简而言之,没有办法忽略空值,你必须在之前检查它们中的每一个(并且从不依赖异常来检查空值)。