don*_*ton 4 java overriding exception-handling interface exception
假设在Java中,我使用的是一个相当普遍的预先存在的接口
public interface Generator {
public String generate();
}
Run Code Online (Sandbox Code Playgroud)
我有自己的课
public class FromFileGenerator implements Generator {
...
public String generate() throws FileNotFoundException {
String output = //read from some file
return file;
}
}
Run Code Online (Sandbox Code Playgroud)
Java编译器对我大吼大叫,因为generate()的实现包含未在原始签名中指定的异常(FileNotFoundException).但是,显然异常不属于接口,但在实现类中也不能忽略.如果不是默默地失败,怎么能解决这个问题呢?
Ted*_*opp 13
您不能将已检查的异常添加到隐藏,覆盖或实现其他方法的方法的声明中.您将需要捕获方法中的异常并对其执行其他操作(例如返回null,或抛出未经检查的异常,可能包装已检查的异常).
覆盖或隐藏另一个方法的方法(包括实现接口中定义的抽象方法的方法)可能不会被声明为抛出比重写或隐藏方法更多的已检查异常.
您可以将实现异常包装在未经检查的异常中并抛出:
public class FromFileGenerator implements Generator {
...
public String generate() {
try {
String output = //read from some file
return file;
} catch (IOException ioe) {
throw new RuntimeException(ioe);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3474 次 |
| 最近记录: |