Java 将方法引用传递给方法会显示错误
我有一个函数定义如下:Java 将方法引用传递给方法会显示错误,java,java-8,Java,Java 8,我有一个函数定义如下: public static <T> T readSingleValue(MyTransaction t, String s, T alternativeVal, Function<Integer, T> rsGetter) { ... return rsGetter.apply(1); } 而ResultSet::getInt()的定义如下: int getInt(int columnIndex) 我的编译器为参数ResultS
public static <T> T readSingleValue(MyTransaction t, String s, T alternativeVal, Function<Integer, T> rsGetter) {
...
return rsGetter.apply(1);
}
而ResultSet::getInt()的定义如下:
int getInt(int columnIndex)
我的编译器为参数ResultSet::getInt
显示以下错误:
无法从静态上下文引用非静态方法
我在这里做错了什么?
ResultSet::getInt
是对静态方法的引用,但该方法是实例方法,这是错误。另一个选择是:
public static <T> T readSingleValue(MyTransaction t, String s, T alternativeVal, Function<ResultSet, T> rsGetter)
函数function rsGetter
功能更强大,因为它可以将ResultSet
映射到所需的对象,该对象可以由数据库中的多个列组成。例如,你可以
readSingleValue(transaction, "select * from users where user_id = 1", null,
rs -> {
User u = new User();
u.setId(rs.getInt(1));
u.setName(rs.getString(2));
...
return u;
});
在哪里可以得到要调用的
getInt
对象的ResultSet
?好问题,我还没有考虑过这个问题。谢谢如果您有变量ResultSet rs
,您可以使用方法引用rs::getInt
作为方法的最后一个参数。您只需使用rs::getInt
。我认为ResultSet
是在方法readSingleValue
中创建的,因为他将sql字符串传递给方法。如果已经有了结果集,为什么要传递sql?
readSingleValue(transaction, "select count(0) from users", 0, rs -> rs.getInt(1));
readSingleValue(transaction, "select * from users where user_id = 1", null,
rs -> {
User u = new User();
u.setId(rs.getInt(1));
u.setName(rs.getString(2));
...
return u;
});