当Shoud i覆盖Java中的Exception的其他功能时?

时间:2015-10-29 07:48:42

标签: java android

我正在尝试在java中为android定义自定义异常。最初我想过使用枚举异常,但在阅读this链接之后,我理解了使用枚举异常的缺点。

考虑到上面我写了一个简单的自定义异常类:

public class EXInvalidEmployeeIDException extends Exception {
    public String msg;
    public Integer employeeID;

    public EXInvalidEmployeeIDException(Integer devID) {
        this.devID = devID;
    }

    public EXInvalidEmployeeIDException(Integer devID, string msg) {
        this.devID = devID;
        this.msg = msg;

    }

    public Integer getEmployeeID () {
        return this.devID;
    }

    public String getEmployeeID () {
        return this.msg
    }
}

我的问题:

1)我是否应该调用超类构造函数?在我的代码中,我没有调用任何超类函数,它仍然可以正常工作。

2)如果需要,我需要从超类中覆盖哪些函数(即;异常类)

this链接中,以下方法被覆盖

  A) Constructor,

  B) Constructor with String

  C) Constructor with Thowable.

3)我的示例代码是否足够?

请告知。

2 个答案:

答案 0 :(得分:1)

如果您正在为自己的异常创建构造函数方法,那么我认为调用super();是好的(且更便宜)。这样,您可以确保Throwable(*超级Exception}将内部状态变量初始化为detailMessagecause等等。

您可以查看Throwable源代码here,看看我在告诉您什么。

要回答第二个问题,您必须覆盖要自定义的构造函数/方法,但是在完成特殊工作后不要忘记调用超级构造函数/方法。

最后,我不会复制msg因为如果你打电话给超级,那么你正在使用Throwable.detailMessage

答案 1 :(得分:0)

  

我是否应该调用超类构造函数?

总是,但是当父类具有可访问的默认构造函数时,编译器可以为您提供它。

  

如果需要,我需要从超类中覆盖哪些函数(即; Exception类)

您需要覆盖的功能(如果有)完全取决于您的需要。这意味着什么取决于你。没有人能为你定义它。