当您需要抛出未在您正在实现的接口中定义的异常时,最佳实践是什么?
这是一个例子:
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 {}
}
在这种情况下,您在读取纸杯蛋糕时会发生特定异常,因此您想抛出与此相关的异常。但是,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 {}
}
在这种情况下,您无法更改Reader,但您想表明CupcakeReader的read方法出现问题。