Java 在封闭函数中处理的未处理检查异常

Java 在封闭函数中处理的未处理检查异常,java,function,exception,unhandled-exception,Java,Function,Exception,Unhandled Exception,对于需要捕获一些已检查异常的类,我有很多方法,它们都将以相同的方式处理。因此,我想编写一个方法,用try-catch封装所有函数。以下是使用JDBC的完整代码: private static <T> T HandleResultSet(ResultSet rs, Function<ResultSet, T> fn) { T returnValue = null; try { while (rs.next()) {

对于需要捕获一些已检查异常的类,我有很多方法,它们都将以相同的方式处理。因此,我想编写一个方法,用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的人来说,重要的是我的getProperty函数中的set.next和set.getString方法需要捕捉SQLException。HandleResultSet中包含了这个捕获,但是编译器似乎没有足够的智能来知道这一点,我似乎无法回避这个问题。有什么办法可以解决这个问题吗


我使用的是IntelliJ IDEA的最新版本。

如果您查看java.util.function.Functionapply的签名,它不会引发任何异常。因此,您必须创建自己的接口来抛出SQLException:

然后:

CheckedFunction<ResultSet, String> getProperty = (ResultSet set) -> {
        if (set.next())
            return set.getString("Property");
        return "ERR";
};
还可以将try with resources用于ResultSet

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