Intellij 说这可以是空指针。但是根据 javadoc
Intellij says that this can be a Null-Pointer. But according javadoc
private boolean checkStatusAct(Contract contract) {
if (contract.getActs() == null || contract.getActs().isEmpty()) {
return true;
} else if (contract.getActs() != null || (!contract.getActs().isEmpty())) { //here
for (ContractAct contractAct : contract.getActs()) {
if (contractAct.getStatusId() == 15) {
return true;
}
}
}
return false;
}
是不是逐个逐个检查,如果不为null (!= null || .isEmpty()) 就不会产生NullPoi
问题在于
contract.getActs() != null || (!contract.getActs().isEmpty())
如果 contract.getActs()
returns 为 null, 将抛出 NullPointerException。在这种情况下,contract.getActs() != null
为假,并且由于 ||
运算符,JVM 必须评估 contract.getActs().isEmpty()
,这将抛出 NullPointerException。
要更正此问题,您应该写
contract.getActs() != null && (!contract.getActs().isEmpty())
但这实际上并不需要,因为您的第一个 if
条件已经处理了 contract.getActs()
或 contract.getActs().isEmpty()
的情况。最好将您的代码重写为
private boolean checkStatusAct(Contract contract) {
if (contract.getActs() == null || contract.getActs().isEmpty()) {
return true;
} else {
for (ContractAct contractAct : contract.getActs()) {
if (contractAct.getStatusId() == 15) {
return true;
}
}
}
return false;
}
从Java8开始你也可以使用流(navnath的解决方案)。
在 Jav 8 或更高版本中。假设 contract.getActs()
是一个列表。你不需要写其他的:你可以像
private boolean checkStatusAct(Contract contract) {
if (contract.getActs() == null || contract.getActs().isEmpty()) {
return true;
}
return contract.getActs().stream().anyMatch(c -> c.getStatusId() == 15);
}
private boolean checkStatusAct(Contract contract) {
if (contract.getActs() == null || contract.getActs().isEmpty()) {
return true;
} else if (contract.getActs() != null || (!contract.getActs().isEmpty())) { //here
for (ContractAct contractAct : contract.getActs()) {
if (contractAct.getStatusId() == 15) {
return true;
}
}
}
return false;
}
是不是逐个逐个检查,如果不为null (!= null || .isEmpty()) 就不会产生NullPoi
问题在于
contract.getActs() != null || (!contract.getActs().isEmpty())
如果 contract.getActs()
returns 为 null, 将抛出 NullPointerException。在这种情况下,contract.getActs() != null
为假,并且由于 ||
运算符,JVM 必须评估 contract.getActs().isEmpty()
,这将抛出 NullPointerException。
要更正此问题,您应该写
contract.getActs() != null && (!contract.getActs().isEmpty())
但这实际上并不需要,因为您的第一个 if
条件已经处理了 contract.getActs()
或 contract.getActs().isEmpty()
的情况。最好将您的代码重写为
private boolean checkStatusAct(Contract contract) {
if (contract.getActs() == null || contract.getActs().isEmpty()) {
return true;
} else {
for (ContractAct contractAct : contract.getActs()) {
if (contractAct.getStatusId() == 15) {
return true;
}
}
}
return false;
}
从Java8开始你也可以使用流(navnath的解决方案)。
在 Jav 8 或更高版本中。假设 contract.getActs()
是一个列表。你不需要写其他的:你可以像
private boolean checkStatusAct(Contract contract) {
if (contract.getActs() == null || contract.getActs().isEmpty()) {
return true;
}
return contract.getActs().stream().anyMatch(c -> c.getStatusId() == 15);
}