我设计了一个上传文件处理如下:
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 {
}
我让它扩展 RuntimeException 因为它使 UploadedFileChecker 中的代码变得干净,但这样做会使其成为未经检查的异常。因此,handleUploadedFile 中的 catch 是不合适的,因为我们不应该捕获未经检查的异常。
我的问题是,我应该捕获 BadUploadedFileException 还是使其扩展 Exception 并将“抛出 BadUploadedFileException”附加到 UploadedFileChecker 的每个方法。
最佳答案
异常应该用于异常条件。您意想不到的事情会发生。
您不应该将它们用于条件逻辑。
乔什·布洛赫(Josh Bloch)在他的书中具体概述了这一点,这本书非常好,恕我直言,这是一本必备书:
关于java - 我应该故意捕获检查异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6144979/