接口实现启动了不同的异常

Jua*_*ano 6 java oop interface exception

我有一个界面

public interface DataDAO {
     public void doSomething() throws Exception;
}
Run Code Online (Sandbox Code Playgroud)

假设有两个实现,一个使用Database来获取数据,另一个使用Webservice.

public class DataDAOJdbc implements DataDAO {
    public void doSomething() throws Exception {
         //Implement
    }
}

public class DataDAOWebService implements DataDAO {
    public void doSomething() throws Exception {
         //Implement
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您已经看到的,问题是启动了超级通用异常.因为这两种实现都需要引发同样的异常.

Jdbc实现实际上只引发了SQLException,而Webservice实现只会提升IOException.

问题是,我怎样才能使界面更优雅,所以我捕获了一个正确的异常?

我首先要创建自己的异常,并在接口级别声明它

public interface DataDAO {
  public void doSomething() throws MyCoolException;
}
Run Code Online (Sandbox Code Playgroud)

然后,当然,实施accinly.

问题是,这有意义吗?我从来没有创建过我自己的异常,所以我不确定这是否有意义.另外,在创建MyCoolException时我应该考虑什么?

Lui*_*oza 4

我想到的第一件事是创建自己的异常,并在接口级别声明它(...)这有意义吗?

是的,这确实有道理,我认为这是处理这些情况的最佳方法。

我将为此提供一个启动示例(基于您当前的代码):

public class MyCoolException extends Exception {
    public MyCoolException() {
    }
    public MyCoolException(String message) {
        this.message = message;
    }
}

public interface DataDAO {
    public void doSomething() throws MyCoolException;
}

public class DataDAOJdbc implements DataDAO {
    public void doSomething() throws MyCoolException {
         //Implement
         try {
         } catch (SQLException e) {
             //handle the exception
             logger.error("Error!", e);
             //throw your custom exception
             throw new MyCoolException(e.getMessage());
         }
    }
}

public class DataDAOWebService implements DataDAO {
    public void doSomething() throws MyCoolException {
         //Implement
         try {
         } catch (IOException e) {
             //handle the exception
             logger.error("Error!", e);
             //throw your custom exception
             throw new MyCoolException(e.getMessage());
         }
    }
}
Run Code Online (Sandbox Code Playgroud)