«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Пункт: Избегайте ненужного использования проверенных исключений.

Пункт: Избегайте ненужного использования проверенных исключений.

Опубликовано 17 ноября 2024 г.
Просматривать:312

Item  Evite o uso desnecessário das exceções verificadas

Проверяемые исключения — мощный инструмент в Java, поскольку они заставляют программиста обрабатывать исключительные условия, повышая надежность кода. Однако чрезмерное использование может затруднить использование API. Чтобы проверенное исключение было оправданным, ситуация должна быть действительно исключительной и допускающей полезные действия со стороны программиста. В противном случае более подходящим может быть непроверенное исключение.

В Java 8 появилась дополнительная проблема с использованием проверяемых исключений, поскольку методы, которые их выбрасывают, нельзя использовать непосредственно в потоках, что требует дополнительной обработки в коде. Чтобы избежать этой сложности, можно рассмотреть альтернативы, такие как возврат дополнительного объекта вместо выдачи проверяемого исключения или разделение метода на два: один проверяет возможность ошибки, а другой выполняет операцию.

Проверенные исключения следует использовать с осторожностью: если восстановление невозможно, используйте непроверенные исключения. Если восстановление возможно, рассмотрите вариант возврата «Необязательно». Если это не дает достаточно информации, то проверенное исключение может быть оправдано.

Плюс:
Вот несколько примеров, иллюстрирующих правильное использование проверяемых исключений и альтернатив, таких как необязательный и использование методов проверки.

Экономно используйте проверенные исключения
Допустим, у нас есть метод, загружающий данные из файла. Если файл не найден, мы хотим создать исключение, чтобы уведомить вызывающую сторону о проблеме. В этом случае проверенное исключение уместно, поскольку разработчик может принять меры для решения проблемы (например, указать правильный путь к архиву).

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, поскольку он может решить проблему, указав правильный путь к файлу.

Использование необязательных исключений вместо проверенных
Если отсутствующий файл является условием, которое не должно прерывать нормальное выполнение, мы можем использовать Необязательный, чтобы указать, что результат может отсутствовать без создания исключения. Это делает API более гибким в тех случаях, когда можно допустить отсутствие значения.

import java.util.Optional;

public class FileLoader {
    public Optional 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 content = loader.loadFile("caminho/para/arquivo.txt");
content.ifPresentOrElse(
    System.out::println,
    () -> System.out.println("Arquivo não encontrado.")
);

В этом примере вызывающему объекту не нужно обрабатывать исключения, а параметр «Необязательный» позволяет более плавно обрабатывать отсутствующий контент.

Разделение метода на два: проверка и действие
В некоторых случаях мы можем разделить метод на два: один проверяет условие, а другой выполняет действие. Это позволяет вызывающему объекту обрабатывать исключительное условие перед вызовом основного метода, что делает 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, непроверяемое исключение, в случае, когда вызывающая сторона пытается загрузить файл, не проверив предварительно, доступен ли он.

Краткое содержание
Проверенное исключение: используется для условий, которые вызывающая сторона может исправить напрямую, например FileNotFoundException для файлов.
Необязательно: используйте, когда отсутствие значения не должно прерывать выполнение программы.

Подразделение методов: отдельные методы проверки и выполнения, когда ошибку можно предсказать и избежать, что делает API более гибким и простым в использовании.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/giselecoder/item-71-evite-o-uso-desnecessario-das-excecoes-verificadas-4ap7?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3