2016-08-22 52 views
0

我试图创建一个方法,将函数的结果放入使用未绑定引用(我认为)的使用者。这是场景。使用JDBC的ResultSet,您可以通过索引获取行值。我有一个我想要将选定值放入的Bean实例。我正在寻找一种方式来避免编写锅炉板映射代码,而是实现类似:Java 8未绑定的参考语法奋斗

static <T> void copy(Consumer<T> setter, Function<T, Integer> getter, Integer i); 

,并调用它像:

copy(Bean::setAValue, ResultSet::getString, 0) 

我不想绑定BeanResultSet到实例太早了,因为我希望这可以用于任何ResultSet豆。

我一直在试图从工作的例子是:

println(Object::toString, 0L); 
+2

,什么是错用'bean.setAValue(rs.getString(0))'?你的代码如何优于那个?顺便说一句,你的问题到底是什么? – Seelenvirtuose

+0

您将无法使用'Consumer'或'Function' - 这些接口声明只接受单个参数的方法。你需要一些可以接受两个参数的东西(在'Bean :: setValue'的情况下 - 一个代表'Bean',然后另一个代表'T')。 –

+0

目前还不清楚你在哪里遇到困难。你可能遇到ResultSet#getString引发一个检查过的'SQLException'的问题。我认为这违反了'Function'接口。 – bradimus

回答

3

当静态引用实例方法,一个额外的参数被添加封闭类型的:

public static <T> void println(Function<T,String> function, T value) { 
    System.out.println(function.apply(value)); 
} 

通过调用。该参数表示要调用该方法的实例。

对于您这将意味着,不必使用BiConsumerBiFunction

static <T> void copy(BiConsumer<Bean, T> setter, 
    BiFunction<ResultSet, T, Integer> getter, Integer i);