引发接口中未定义的异常
当您需要引发未在正在实现的接口中定义的异常时,应遵循的最佳实践是什么?
下面是一个示例:
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 定义读取,以便它引发一些父类型,如 Exception,但随后您将丢失异常的上下文。在这种情况下,您应该怎么做?谢谢!
另一个有趣的情况是涉及一个你无法控制的界面。在这种情况下,指示问题已发生的最佳方法是什么?
为了便于说明,下面是另一个示例:
public interface Reader
{
public abstract void read();
}
public class CupcakeReader implements Reader
{
public void read() throws CupcakeException {}
}
在这种情况下,您无法更改 Reader,但您希望指示 CupcakeReader 的读取方法中发生了问题。