考虑以下代码
public class foo {
public static void main(String[] args) {
MyClass mc = new MyClass();
mc.read();
}
}
和
public class MyClass {
private BufferedWriter verb;
private String vFile;
MyClass()
{
try {
verb = new BufferedWriter(new FileWriter(vFile));
} catch(IOException e) {
System.out.println("Internal error1");
System.out.println(e.getMessage());
}
}
public void read()
{
// read a file and create an array
verb.write("Array created"); // ERROR
}
}
正如您所看到的,write
未放置在try..catch
块中。我可以为此写一个问题,但是MyClass
有很多方法,verb.write
被大量使用。我也可以编写public void read() throws IOException
将异常抛给调用者main()
。我仍然需要将mc.read()
放在try..catch
块中。由于MyClass有很多方法,所以我必须将它们全部放在main()
的catch块中。
那么,有没有更好的方法来处理它?是否可以将与verb
相关的所有异常重定向到定义了try..catch的构造函数MyClass()
?
答案 0 :(得分:1)
一种方法是让自己的安全"围绕BufferedWriter
包装(就此而言,任何类型的Writer
)并在那里处理I / O错误:
class SafeWriter {
private final Writer writer;
public SafeWriter(Writer writer) {
this.writer = writer;
}
public void write(int n) {
try {
writer.write(n);
} catch (IOException e) {
handleException(e);
}
}
public void write(String s) {
try {
writer.write(s);
} catch (IOException e) {
handleException(e);
}
}
... // Provide wrappers for other methods here
private void handleException(IOException e) {
...
}
}
现在,您可以在新类上使用write
方法在类中以统一的方式处理异常:
private SafeWriter verb;
...
verb = new SafeWriter(new BufferedWriter(new FileWriter(vFile)));