Необработанное проверенное исключение, обработанное в функции включения - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть множество методов для класса, которые требуют перехвата некоторых проверенных исключений, где они будут обрабатываться одинаково.Следовательно, я хочу написать метод для включения всех функций с помощью try catch.Вот полный код с использованием JDBC:

private static <T> T HandleResultSet(ResultSet rs, Function<ResultSet, T> fn) {
    T returnValue = null;

    try {
        while (rs.next()) {
            returnValue = fn.apply(rs);
        }
    }
    catch(SQLException se)
    {
        se.printStackTrace();
    }
    finally
    {
        try {
            if (rs != null)
                rs.close();
        }
        catch(SQLException se) {
            se.printStackTrace();
        }

        return returnValue;
    }
}

public static String MySQLMethod(int param)
{
    Function<ResultSet, String> getProperty = (ResultSet set) ->
    {
        if (set.next())
            return set.getString("Property");
        return "ERR";
    };

    ResultSet rs = CallSQL("SELECT * FROM [User] WHERE Param = '" + param + "';");
    return HandleResultSet(rs, getProperty);
}

Для тех, кто не знаком с JDBC, важной частью является то, что методы "set.next ()" и "set.getString ()" в моем "getPropertymsgstr "функция требует перехвата SQLException.Этот улов включен в "HandleResultSet", но компилятор не выглядит достаточно умным, чтобы это понять, и я не могу обойти эту проблему.Любые мысли о способах справиться с этим?

Я использую последнюю версию IntelliJ IDEA.

1 Ответ

0 голосов
/ 04 декабря 2018

Если вы посмотрите на подпись java.util.function.Function#apply, она не выдает никаких исключений.Таким образом, вы должны создать свой собственный интерфейс, который выдает SQLException:

@FunctionalInterface
public interface CheckedFunction<T, R> {
    R apply(T t) throws SQLException;
}

, а затем:

CheckedFunction<ResultSet, String> getProperty = (ResultSet set) -> {
        if (set.next())
            return set.getString("Property");
        return "ERR";
};

Также используйте try-with-resources для ResultSet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...