public class ExampleNullPointer {
public static void main(String[] args) {
try {
getEmployee().getDept().getLocation().getContactPerson();
} catch (NullPointerException e) {
e.printStackTrace();
}
}
}
输出
java.lang.NullPointerException
at com.india.test.ExampleNullPointer.main(ExampleNullPointer.java:7)
查看上面的代码及其输出,当java抛出java.lang.NullPointerException
时,无论如何我们可以包装此NullPointerException
以显示其他信息,例如Object为null,或者有关其父对象的一些信息,例如父对象的名称属性?
我主要查找父对象的属性值,例如Dept为null,因此我可以通过覆盖toString()
方法来记录员工的主键或员工姓名。
无论如何,我可以通常进行更改以获取这些信息,以便每当程序抛出NullPointerException
时,我都会获得这些额外的信息,这些信息可以帮助我轻松识别导致问题的问题和数据吗? p>
答案 0 :(得分:3)
NullPointerException
不应该是正常应用程序逻辑的一部分。它仅用于查找代码中的错误。如果你写getEmployee().getDept().getLocation().getContactPerson()
,你应该绝对确定员工,部门,位置是否存在。因此,您可以像这样修改您的方法:
public Employee getEmployee() {
if(employee == null) {
// some business-level exception
throw new EmployeeAbsentException(this.toString());
}
return employee;
}
// in Employee class
public Dept getDept() {
if(dept == null) {
throw new EmployeeHasNoDeptException(this);
}
return dept;
}
等等。当然,您应该拥有自己的业务逻辑异常系统。您可以重用相同的异常类或创建多个异常类(可能是对一些抽象BusinessLogicException
进行子类化)。通过这种方式,您可以轻松区分发生的情况并向用户显示相应的消息,或者记录它们以调查错误。
如果您希望能够在不捕获异常的情况下检查Employee
是否存在,请添加其他方法:
public boolean hasEmployee() {
return employee != null;
}