传递方法参考方法显示错误

时间:2017-03-06 16:24:05

标签: java java-8

我有一个定义如下的函数:

public static <T> T readSingleValue(MyTransaction t, String s, T alternativeVal, Function<Integer, T> rsGetter) {
    ...
    return rsGetter.apply(1);
}

现在我想这样调用这个方法:

readSingleValue(transaction, "select count(0) from users", 0, ResultSet::getInt);

而ResultSet :: getInt()定义如下:

int getInt(int columnIndex)

我的编译器显示参数ResultSet::getInt的跟随错误: 无法从静态上下文引用非静态方法

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

ResultSet::getInt是对静态方法的引用,但该方法是实例方法,这是错误。另一种选择可能是:

public static <T> T readSingleValue(MyTransaction t, String s, T alternativeVal, Function<ResultSet, T> rsGetter)

并将其命名为

readSingleValue(transaction, "select count(0) from users", 0, rs -> rs.getInt(1));

函数Function<ResultSet, T> 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;
        });