自定义异常类 - 我应该扩展运行时异常还是异常?

时间:2016-04-16 11:18:03

标签: java android exception runtimeexception

任何人都可以指导我是否应该扩展Exception或RuntimeException?

通常,它用于验证,意外异常,自定义异常,如果业务逻辑失败则提升等。

以下是我的自定义异常类。

/**
 * The class <code>BaseException</code> is a custom exception class.
 * @author Pratiyush Kumar Singh
 */
public class BaseException  extends Exception {

    static final long serialVersionUID = -3387516993124229948L;

    /**
     * Constructs a new exception.  
     */
    public BaseException() {
        super();
    }

    /**
     * Constructs a new exception with the specified detail message.  
     * @param   message -  It contains the error message.
     */
    public BaseException(String message) {
        super(message);
    }

    /**
     * Constructs a new exception with the specified detail message.  
     * @param   message -  It contains the error message.
     * @param   cause   -  Instance of Throwable.
     */
    public BaseException(String message, Throwable cause) {
        super(message, cause);
    }

}

2 个答案:

答案 0 :(得分:1)

有些人说自定义异常是代码味道。你当然不应该有太多。

Java的原始默认值是已检查的异常。设计师反对C返回代码约定,因为他们不喜欢开发人员可以忽略它们的想法。已检查的异常需要被捕获和处理。

C#走向另一个方向,并首选未经检查的例外。发现使用try / catch的乱抛垃圾代码很麻烦。

您应根据自己的要求决定是否延长Exception(已选中)或RuntimeException(未选中)。问问自己:我应该强迫开发人员处理这种情况吗?

或者你可以追随时尚,让它们都不受控制。

我建议您尽可能使用JDK中的现有类。

答案 1 :(得分:0)

编译器不要求客户端处理RuntimeException,而是Exception。因此,如果要强制客户端编写尝试从条件中恢复的代码,则应从Exception扩展,如果不是,则应从RuntimeException扩展。

下面是一个示例,说明如果您没有从RuntimeException扩展,客户端将如何处理。

void foo() throws MyException(); // throw up the stack

void foo() { // handle exception with try-catch
    try {
    }
    catch (MyException e) {
    }
}