java - 我应该故意捕获检查异常吗?

标签 java exception

我设计了一个上传文件处理如下:

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)在他的书中具体概述了这一点,这本书非常好,恕我直言,这是一本必备书:

http://java.sun.com/docs/books/effective/

关于java - 我应该故意捕获检查异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6144979/

相关文章:

java - 当 Java ServerSocket 在对象传输期间中断时会发生什么?

java - 如何在 Spring Integration 的入站网关中接受 MultipartFile

java - 即使文件夹存在, file.listFiles() 返回 null

java - 为什么我在通过键时得到 CancelledKeyException?

ios - 是什么导致我的 "unrecognized selector"异常?

java - : Unable to start web server; nested exception is org. springframework.boot.web.server.WebServerException:无法启动嵌入式Tomcat

java - throw e 和 throw new Exception(e) 有什么区别?

java - 正确使用 RuntimeException?

java - Matlab java接口(interface): java. io.IOException : The issuer can not be found in the trusted CA list?

java - Google-Eclipse插件:向项目添加入口点