项目 避免不必要地使用检查异常

项目 避免不必要地使用检查异常

检查异常是 java 中的一个强大工具,因为它们迫使程序员处理异常情况,从而提高代码可靠性。然而,过度使用可能会导致 api 难以使用。为了证明检查异常是合理的,情况必须是真正的异常并且程序员能够采取有用的操作。否则,未经检查的异常可能更合适。

java 8 给检查异常的使用带来了额外的挑战,因为抛出异常的方法不能直接在流中使用,需要在代码中进行额外的处理。为了避免这种复杂性,可以考虑替代方案,例如返回一个可选对象而不是抛出可验证的异常,或者将方法分为两个,一个检查错误的可能性,另一个执行操作。

应谨慎使用受检异常:如果无法恢复,请使用非受检异常。当恢复可行时,考虑可选返回。如果这没有提供足够的信息,那么检查异常可能是合理的。

加:
这里有一些例子来说明检查异常和替代方案(例如optional)的正确使用以及检查方法的使用。

谨慎使用检查异常
假设我们有一个从文件加载数据的方法。如果没有找到该文件,我们想抛出一个异常来通知调用者有问题。在这种情况下,检查异常是合适的,因为开发人员可以采取措施解决问题(例如提供正确的存档路径)。

public class fileloader {
    public string loadfile(string filepath) throws filenotfoundexception {
        file file = new file(filepath);
        if (!file.exists()) {
            throw new filenotfoundexception("arquivo não encontrado: " + filepath);
        }
        // código para carregar o arquivo
        return "conteúdo do arquivo";
    }
}

这里调用者需要处理 filenotfoundexception 异常,因为他可以通过提供正确的文件路径来解决问题。

使用可选异常代替检查异常
如果丢失文件是不应该中断正常执行的情况,我们可以使用optional来指示结果可以丢失而不抛出异常。这使得 api 在可以容忍缺乏价值的情况下更加流畅。

import java.util.optional;

public class fileloader {
    public optional<string> loadfile(string filepath) {
        file file = new file(filepath);
        if (!file.exists()) {
            return optional.empty();
        }
        // código para carregar o arquivo
        return optional.of("conteúdo do arquivo");
    }
}

在调用者代码中:

fileloader loader = new fileloader();
optional<string> content = loader.loadfile("caminho/para/arquivo.txt");
content.ifpresentorelse(
    system.out::println,
    () -> system.out.println("arquivo não encontrado.")
);

在这个例子中,调用者不需要处理异常,而optional可以让它更顺利地处理缺失的内容。

方法分为两种:验证和操作
在某些情况下,我们可以将该方法分为两种:一种检查条件,另一种执行操作。这允许调用者在调用 main 方法之前处理异常情况,使 api 更加灵活。

public class fileloader {
    // verifica se o arquivo está disponível
    public boolean isfileavailable(string filepath) {
        file file = new file(filepath);
        return file.exists();
    }

    // carrega o conteúdo do arquivo
    public string loadfile(string filepath) {
        if (!isfileavailable(filepath)) {
            throw new illegalstateexception("arquivo não encontrado: " + filepath);
        }
        // código para carregar o arquivo
        return "conteúdo do arquivo";
    }
}

在调用者代码中:

FileLoader loader = new FileLoader();
String filePath = "caminho/para/arquivo.txt";

if (loader.isFileAvailable(filePath)) {
    String content = loader.loadFile(filePath);
    System.out.println(content);
} else {
    System.out.println("Arquivo não encontrado.");
}

这里我们使用 illegalstateexception,这是一种未经检查的异常,如果调用者尝试加载文件而不首先检查它是否可用。

总结
checked exception:用于调用者可以直接修复的条件,例如文件的 filenotfoundexception。
可选:当缺少值不应中断程序流程时使用。

方法划分:在可以预测和避免错误的情况下,将检查和执行方法分开,使api更加灵活和简单使用。

以上就是项目 避免不必要地使用检查异常的详细内容,更多请关注硕下网其它相关文章!