我有一个定义如下的函数:
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
的跟随错误:
无法从静态上下文引用非静态方法
我在这里做错了什么?
答案 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;
});