我一直试图找到一个很好的解决方案来解决这个问题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。
这两段代码来自我程序的不同部分,我只想展示它是如何工作的。
答案 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()
}
这样你就不会在第一种情况下得到空指针异常。
简而言之,没有办法忽略空值,你必须在之前检查它们中的每一个(并且从不依赖异常来检查空值)。