Wyjątek w interfejsach funkcyjnych

0

Cześć, mam problem z interfejsami funkcyjnymi, otóż siedzę kolejną godzinę i nie mogę ruszyć.

Mam kod:

public static void main(String[] args) {

    Function<String, String> lambda = path -> {
        String result = null;
        try {
            BufferedReader br = new BufferedReader(new FileReader(path));
            String line;
            while ((line = br.readLine()) != null) {
                result = result + line;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    };
}

a chcę z niego zrobić:

public static void main(String[] args) throws IOException {

    Function<String, String> lambda = path -> {
        String result = null;
        BufferedReader br = new BufferedReader(new FileReader(path));
        String line;
        while ((line = br.readLine()) != null) {
            result = result + line;
        }
        return result;
    };
}

Czyli, potrzebuję zrobić tak aby odejść od "try, catch" w mojej metodzie "lambda" na rzecz wyjątku wyrzucanego w nagłówku metody.

Zastrzeżenie jest takie, że nie mogę tworzyć własnych interface'ów. "Lambda" może być interfacem z java.util.function lub rozszerzeniem jednego z nich. Czytałem o tworzeniu własnego interfejsu z adnotacją @FunctionalInterface ale nie mogę stworzyć własnego od podstaw. Próbowałem coś takiego:

@FunctionalInterface
public interface MyFunction<U, V> extends Function<U, V>
{
    V apply(U u) throws Exception;
}

ale w tym przypadku program mówi, że "overridden method does not throw Exception".
Z kolei takie rozwiązanie wykluczyłoby Exception z nagłówka metody...

Czy miałby ktoś jakiś pomysł? Cokolwiek? Siedzę kolejną godzinę a nie mogę sobie z tym poradzić kompletnie...

0

Nie da się tego zrobić bez tworzenia własnego interfejsu. Mozesz ewentualnie złapać sobie te wyjątki w tej twojej funkcji, albo złapać i rzucić jakiś RuntimeException. Innych opcji nie ma.

1 użytkowników online, w tym zalogowanych: 0, gości: 1