11

一般的な質問は次のとおりです。

  • 構文を使用する場合、関数型インターフェイスobject::aMethodなどの型に変換できますか?MethodHandle
  • いいえの場合、可能であればJava 8でメソッド参照を間接的に呼び出すにはどうすればよいですか?

例として、次のようにしたいとしますMethodRefRunner

class MethodRefRunner {
  static void execute(Object target, WHATTYPE mref, Object... args) {
    mref.apply(args);
  }
}

また、次のように使用できます。MethodRefRunner.execute(o, o::someMethod, someParam)

上記のスニペットでWHATTYPEは、 のオプションの 1 つjava.util.function.Functionが非常に限定的です。この回答が言及しているように、バージョン b75 より前では、java.util.function.Blockが利用可能であり、便利な場合があります。

一方でWHATTYPE、何らかの形で ? に変換される可能性はありjava.lang.invoke.MethodHandleますか?

Java の専門家への注意: 必要に応じて質問のタイトルを変更してください。

4

2 に答える 2

5

メソッド参照はラムダと同じように機能し、ラムダと同様に、それ自体には「型」はありません。そのタイプは、使用されるコンテキストによって異なります。したがって、あなたの質問は本当に意味がありません。このMethodRefRunner.execute()メソッドの呼び出しでメソッド参照を使用する場合、メソッド参照の型は(それが何であれ)のインスタンスになります。これは、メソッドが受け入れるように宣言されているためです。WHATTYPE他の場所から入手した場合、その場所はそれがどのタイプであるかを知っています。

于 2013-06-17T23:40:10.433 に答える