我设计了一个上传的文件处理如下:我应该故意捕捉检查异常吗?
UploadFileHandler是提供检查方法的主要类。
public class UploadedFileHandler {
public static void handleUploadedFile(String fileName) {
try {
checkFile(fileName);
} catch (BadUploadedFileException ex) {
deleteFile(fileName);
}
}
private static void checkFile(String fileName) {
new UploadedFileChecker(fileName).check();
}
private static void deleteFile(String fileName) {
//...code to delete the file.
}
}
并且UploadedFileChecker执行检查。
public class UploadedFileChecker {
private String fileName;
public UploadedFileChecker(String fileName) {
this.fileName = fileName;
}
public void check() throws BadUploadedFileException {
checkFileFormat();
scanVirus();
}
private void checkFileFormat() {
// if file format unsupported
throw new BadUploadedFileException();
}
private void scanVirus() {
// if contains virus
throw new BadUploadedFileException();
}
}
而且BadUploadedFileException声明如下:
public class BadUploadedFileException extends RuntimException {
}
我让它,因为它使得UploadedFileChecker干净的代码,但这样做使它成为一个检查异常继承RuntimeException。因此,handleUploadedFile中的catch不适用,因为我们不应该捕获未检查的异常。
我的问题是,我是否应该捕获BadUploadedFileException或使其扩展Exception并将“抛出BadUploadedFileException”追加到UploadedFileChecker的每个方法。
同意,这是正确的。如果可以使用条件逻辑来避免异常,那就去做吧。 'void checkFileFormat'应该是'boolean isValidFormat()','void scanVirus()'应该是'boolean hasVirus()'。如果可以的话,在施工中自动完成这些工作,因为它是一个处理程序,然后只给用户这些已经评估过的东西。 – 2011-05-26 21:04:06
谢谢克里斯 - 完美的例子。 – 2011-05-26 21:07:34