java.lang.NullPointerException显示有关父对象和空对象

时间:2015-09-23 05:13:20

标签: java nullpointerexception

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>

1 个答案:

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