2017-03-02 13 views
2

サーバーリンクをスキャンしましたが、Java 8ラムダ式の簡単な解決策が見つかりませんでした。私が見つけた最も有用なヒントはJava 8 Lambdasでしたが、本当に私の興味を満足させませんでした。Java 8:ラムダ参照のパラメータとしてのメソッド

私は私のコードでreoccuringパターン達成したい:

List<?> content=retrieveContent(strFilter); 
if (!content.isEmpty()) 
    setField1(content.get(0)); 

を、私は

retrieveContent(strFilter, this::setField1)として、それは簡単な持っていると思いますが、どういうわけか、私は適切な構文を得ることはありません - 特に方法のために。私は文字列としてそれを行うことができ、if via methodと呼ぶことができますが、そのタイプミスが発生するよりも...他のアイデア?

+0

はどのようにしてsetField1を知っていますか()メソッドが利用できるのですか? – m0skit0

答えて

6

以外の値でジェネリックスを入力する限り動作するConsumerを探しているようです。例えば

private List<Object> retrieveContent(String strFilter, Consumer<Object> firstItemConsumer) { 
    List<Object> list = new ArrayList<>(); 

    // Build the return... 

    if(!list.isEmpty()) { 
     firstItemConsumer.accept(list.get(0)); 
    } 

    return list; 
} 

は、その後で呼び出すことができます:

List<Object> content = retrieveContent(strFilter, this::setField1); 
+1

そしてもちろん、 ''の代わりに、ホストクラスの型パラメータ、またはメソッドが汎用化されている場合はそのメソッドの型パラメータを参照できます。 –

+0

Thx、これは基本的には期待通りに動作します:-) JPAはLambda-stuff(少なくともEclipseLink 2.5xの場合)を好きではないことを除いて – LeO

+0

そしてEclipseLink 2.6.4ではうまく動作します:-) – LeO

関連する問題