在封闭函数中处理未处理的已检查异常
Unhandled checked exception handled in enclosing function
我有大量的 class 方法需要捕获一些已检查的异常,它们都将以相同的方式处理。因此,我想编写一个方法,将所有函数都包含在 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。这个 catch 包含在 "HandleResultSet" 中,但编译器似乎不够聪明,无法知道这一点,而且我似乎无法解决这个问题。关于处理此问题的方法有什么想法吗?
我正在使用最新版本的 IntelliJ IDEA。
如果您查看 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
我有大量的 class 方法需要捕获一些已检查的异常,它们都将以相同的方式处理。因此,我想编写一个方法,将所有函数都包含在 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。这个 catch 包含在 "HandleResultSet" 中,但编译器似乎不够聪明,无法知道这一点,而且我似乎无法解决这个问题。关于处理此问题的方法有什么想法吗?
我正在使用最新版本的 IntelliJ IDEA。
如果您查看 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