2016-08-22 8 views
0

私は関数の結果をコンシューマにあなたがバインドされていない参照を使用するようにする方法を作成しようとしています。ここにシナリオがあります。 JDBCのResultSetを使用すると、索引によって行の値を取得できます。私は、選択した値を配置したいBeanインスタンスを持っています。私はにバインドBeanResultSetをしたくないJava 8バインドされていない参照構文の闘争

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

を:好き

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

そして、それを呼び出す:私は、ボイラープレートマッピングコードを書く避ける代わりのようなものを達成するための方法を探しています私はこれをResultSetのどんなbeanでも使えるようにしたいので、あまりにも早すぎます。

私はから作業しようとしてきた例は次のとおりです。

経由で呼び出され
public static <T> void println(Function<T,String> function, T value) { 
    System.out.println(function.apply(value)); 
} 

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

をと '' bean.setAValue(rs.getString(0))と間違って何ですか?あなたのコードはどのように優れていますか? Btw、あなたの問題は何ですか? – Seelenvirtuose

+0

'Consumer'や' Function'は使用できません.1つの引数だけを受け入れるインターフェース宣言メソッドです。 2つの引数( 'Bean :: setValue'の場合は' Bean'を表すもの、 'T'を表すもの)を受け入れることができるものが必要です。 –

+0

どこに問題があるのか​​はっきりしていません。 'ResultSet#getString'がチェックされた' SQLException'を投げている問題にぶつかるかもしれません。私は 'Function'インターフェースに違反していると思う。 – bradimus

答えて

3

静的インスタンスメソッドを参照する場合、追加のパラメータを囲む形で追加されます。このパラメータは、メソッドを呼び出すインスタンスを表します。 BiConsumerBiFunction使用すること

意味するだろうあなたのために

、:

static <T> void copy(BiConsumer<Bean, T> setter, 
    BiFunction<ResultSet, T, Integer> getter, Integer i); 
関連する問題