处理方法的类型异常参数的最有效方法是什么

Dev*_*ked 3 java performance exception

我有一个方法,它将异常作为特定方法的参数.此方法需要根据异常类型执行不同的逻辑.在以下两种处理方式之间..什么是最有效的方式(有第三种更好的方式)..以及为什么

public void processException(Exception ex) {
   try {
      throw ex;
   } catch(CustomException e1) {
      //do something
   } catch (CustomException2 e2) {
      //do something else
   }
}
Run Code Online (Sandbox Code Playgroud)

要么

public void processException(Exception ex) {
   if (ex instanceof CustomException) {
      // do something
   } else if (ex instanceof CustomException2) {
      // do something else
   }
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 7

除了效率之外,第二种方式是首选方式,因为例外不​​会在非特殊情况下抛出."调度"的第一种方法是在常规控制流中使用异常抛出,这使得读取程序变得更加困难.

此外,这两个方法并不相同:第一个程序必须声明为抛出一个已检查的异常,因为并非所有子类都由catch块处理.

如果您正在处理程序定义的自定义异常,那么您可以避免检查子类型:因为Exception对象是常规类,您可以向它们添加包可见方法,并让它们实现包含可见性的包.方法.然后异常将覆盖该方法,允许您使用常规的"虚拟"分派,而不是在运行时检查确切的类类型.

以下是此方法的示例:假设您希望将异常写入日志文件.你可以这样做:

interface LoggableException {
    void logToFile();
}
public class CustomExceptionOne extends Exception implements LoggableException {
    ...
    public void logToFile() {
        // Do something
    }
}
public class CustomExceptionTwo extends Exception implements LoggableException {
    ...
    public void logToFile() {
        // Do something else
    }
}
public void processException(Exception ex) {
    if (ex instanceof LoggableException) {
        LoggableException lEx = (LoggableException)ex;
        lEx.logToFile();
    }
}
Run Code Online (Sandbox Code Playgroud)