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;
        });