2016-08-24 11 views
1

私は一番下にあるようなProxyGeneratorを持っています。私の問題は、今、私はこれがどのタイプか分からないということです。Java-8ラムダ式 - 機能的インターフェイスタイプ

Consumer<...?????> myConsumer = (proxy, method, args) -> method.invoke(realSubject, args); 

消費者が間違っている、ラムダ式は(例えば、Eclipseによる)であるタイプの決定の簡単な方法はありますか? Eclipseで

public class ProxyGenerator { 

    public static <P> P makeProxy(Class<P> subject, P realSubject) { 

     Consumer<Subject_A> myConsumer = (proxy, method, args) -> method.invoke(realSubject, args); 

     final Object proxyInstance = Proxy.newProxyInstance(subject.getClassLoader(), new Class<?>[] { subject }, 
      (proxy, method, args) -> method.invoke(realSubject, args)); 
     return subject.cast(proxyInstance); 
    } 
} 
+0

無効であることの何種類それはする必要がありますか? myConsumerはあなたの例ではどこにも使われていません。 – zeroflagL

答えて

3

、あなたは単に上へマウスポインタを移動することができます「 - >」記号:表示されますツールチップが実装され、ラムダのための完全なメソッドシグネチャを持っています。

あなたの場合、実装された方法は単にInvocationHandler.invokeメソッドです。だから、

、コードが宣言しmyConsumerを使用して、代わりとして宣言する必要があります任意の結果のない引数を消費し、一度、すべてのラムダで「キャプチャ」のために非常に便利なインタフェースでありながら、

final InvocationHandler myHandler = (proxy, method, args) -> method.invoke(realSubject, args); 
final Object proxyInstance = Proxy.newProxyInstance(subject.getClassLoader(), new Class<? >[] { subject }, myHandler); 

なおConsumer、ありますそれだけ。ラムダがそのモデルに適合しない場合、それをConsumerと宣言する方法はありません。特に、それは持っているので、あなたのラムダのConsumeraccept法に適合しないことができます。

  • 三つの引数の代わりに、1
  • 結果を、代わりに