java异常的总接口_重构:Java特别的接口修改:在throws子句中添加一个异常?
我用具體的代碼來解釋下吧
接口A,有方法X
public interface A {
public void methodX() throws IOException;
}
在用戶模塊有這樣一段調(diào)用
public class ModuleUser{
public void methodY(A a) throws IOException
{
a.methodX();
}
}
現(xiàn)在要對方法X增加一個異常,變?yōu)?#xff1a;
public interface A {
public void methodX() throws IOException,DataFormatException;
}
這樣用戶模塊ModuleUser的方法Y就要修改,不修改,編譯就不會通過。
怎么樣解決呢?
方法1,新方法調(diào)用舊方法。(接口中不能新方調(diào)用舊方法,所以我改為抽象類)
public abstract class A {
public void methodX() throws IOException
{
try {
methodNewX();
} catch (DataFormatException e) {
throw new RuntimeException(e);
}
}
public abstract void methodNewX() throws IOException ,DataFormatException;
}
方法2: 以拋出一個unchecked異常,unchecked就是編譯器不檢查的運行時異常。
如下
public interface A {
public void methodX() throws IOException,RuntimeException;
}
這樣用戶代碼也不用改。
但這兩個方法都不好。
作者喜歡的做法是這樣的(也是推薦的方式)。
在包中定義自己的異常
public class MyException extends Exception {
}
接口一開始就寫成
public interface A {
public void methodX() throws MyException;
}
用戶模塊就會是這樣的:
public class ModuleUser{
public void methodY(A a) throws MyException
{
a.methodX();
}
}
如果再遇到上面要加異常信息的情況
就為MyException創(chuàng)建一個子類,加接口A上,這樣用戶代碼就不用改,也能適配。
上面一段話大概就是想表達這個觀點。
因為這本書是國外人寫的,翻譯成中文,所以讀起來有點別扭。
英文原文是這樣的
There is one particular area with problems in changing interfaces in Java: adding an exception to the throws clause.
讀這本書,覺得不好理解的,就可試著看看英文原文。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的java异常的总接口_重构:Java特别的接口修改:在throws子句中添加一个异常?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java并发排序_Java并发(三):重
- 下一篇: 华硕推出 ProArt 鼠标垫:配备抗菌