Sco*_*ott 16 java interface exception throw
当您需要抛出未在您正在实现的接口中定义的异常时,要遵循的最佳实践是什么?
这是一个例子:
public interface Reader
{
public abstract void read() throws IOException;
}
public class CarrotReader implements Reader
{
public void read() throws IOException {}
}
public class CupcakeReader implements Reader
{
public void read() throws IOException, CupcakeException {}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您在阅读纸杯蛋糕时会发生特定的异常,因此您希望抛出与此相关的异常.但是,Reader没有在其界面中定义此类异常,那么您如何做?此外,将CupcakeException添加到Reader接口中的throws子句没有意义,因为这种类型的异常特定于CupcakeReader.解决这个问题的一种方法是让Reader定义read,使其抛出一些父类型,如Exception,但是你会丢失异常的上下文.在这种情况下你应该怎么做?谢谢!
已经提出的另一个有趣的情况涉及一个你无法控制的界面.在这种情况下,表明问题发生的最佳方法是什么?
为了便于说明,这是另一个例子:
public interface Reader
{
public abstract void read();
}
public class CupcakeReader implements Reader
{
public void read() throws CupcakeException {}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您无法更改Reader,但您想表明CupcakeReader的read方法中出现了问题.
Tho*_*sen 13
您可能必须创建预期类型的例外.
... catch(CupcakeException e) {
throw new IOException("The sky is falling", e);
}
Run Code Online (Sandbox Code Playgroud)
使用名为ReaderException的东西,它将作为异常层次结构的根接口.ReaderException还将提供指向由于较低级别异常而引发的其他异常的链接.
| 归档时间: |
|
| 查看次数: |
10362 次 |
| 最近记录: |