Проброс исключения в методе интерфейса

199
25 февраля 2021, 15:30

Зачем указывать для не дефолтного и не статического (т.е. обычного) метода интерфейса пробрасываемое им исключение?

Ведь при реализации данного метода в каком-то классе, имплементирующем данный интерфейс мы вовсе не обязаны обеспечить проброс данного исключения.

Вот пример:

import java.io.IOException;
public interface MyCommand {
    void exit() throws IOException;
}
public class Main implements MyCommand{
    @Override
    public void exit() {
        System.out.println("Сработал метод exit()");
    }
    public static void main(String[] args) {
        new Main().exit();
    }
}
Answer 1

Интерфейс он не для Вас, он для вызывающей стороны и он показывает что вызывающая сторона должна обработать исключение, а бросите вы его или нет в конкретной реализации уже дело реализации.

В вашем примере при вызове исключение не требуется к обработке т.к. вы обращаетесь не к интерфейсу, а к объекту Main и его методу exit напрямую, приведите тип и все произойдет, вот полюбуйтесь:

import java.io.IOException;
public interface MyCommand {
    void exit() throws IOException;
}
public class Main implements MyCommand{
    @Override
    public void exit() {
        System.out.println("Сработал метод exit()");
    }
    public static void main(String[] args) {
        Main m = new Main();
        // не требует обработки т.к. метод Main.exit не имеет исключения в сигнатуре
        m.exit();
        MyCommand c = (MyCommand) m;
        // требует обработки т.к. метод MyCommand.exit имеет исключение в сигнатуре
        c.exit();
    }
}
READ ALSO
Перенос строки в TextArea с помощью shift + enter

Перенос строки в TextArea с помощью shift + enter

Пытаюсь сделать так, чтобы при нажатии на enter строка не переносилась, а при зажатом shift переносиласьСделал boolean переменную, отвечающую за зажатый...

96
StreamAPI и немного регулярного выражения

StreamAPI и немного регулярного выражения

Суть задачи: Получить из коллекции поток (Stream)Получить из потока коллекцию всех пользователей, имена которых не содержат чисел, вывести содержимое...

89
Быстрая организация работы с *.STL файлами в Java или C#

Быстрая организация работы с *.STL файлами в Java или C#

Подскажите какие-нибудь простые но эффективные технологии для считывания содержимого *STL файла, обработки этого содержимого и вывода на экран...

87
H2 db в SpringBoot не сохраняет данные

H2 db в SpringBoot не сохраняет данные

Как настроить H2 в Spring Boot для постоянного хранения данных?

120