2017-11-15 10 views

答えて

2

メソッド参照の機能インタフェースを実装する実際の型は、意図的に指定されていません。重要なのは、それが現在のJREによって提供されることだけです。

実際には、HotSpot/OpenJDKの場合、メソッド参照を含むクラスと同じパッケージおよびクラスローディングコンテキスト内に存在するランタイム生成クラスです。特殊クラスを継承せず、ターゲットタイプで定義されたインタフェース以外のインタフェースも実装しません。したがって、このクラスにはいくつかの特別なプロパティがあります。つまり、名前で検索することはできません。定義するクラスローダーの到達可能性に関係なくガベージコレクションが行われますが、Reflection APIの一部ではありません。次のようにメソッドの参照用に作成されたインスタンスの

特性がthe Java Language Specificationによって指定され:

方法参照式の値は、以下の特性を持つクラスのインスタンスへの参照である。

  • このクラスは、対象となる機能インターフェイスタイプを実装し、ターゲットタイプが交差タイプであれば、交差点に記載されている他のすべてのインターフェイスタイプを実装します。
  • 方法基準発現はそれぞれ非 static部材方法 Umため、 Uを入力した
  • Uの関数型はmの署名のサブシグニチャを有する場合、そのクラスは、呼び出しを宣言

    メソッドは、mをオーバーライドします。呼び出しメソッドの本体は、以下で説明するように、参照されたメソッドを呼び出すか、クラスインスタンスを作成するか、配列を作成します。呼び出しメソッドの結果がvoidでない場合、本文は、メソッド呼び出しまたはオブジェクト作成の結果を、必要な割り当て変換(5.2節)の後に返します。

    オーバーライドされるメソッドの型の消去が、その関数の型がUの消去と異なる場合、メソッドの呼び出しまたはオブジェクトの作成の前に、呼び出しメソッドの本体が各引数の値がインスタンスであることを確認しますファンクションタイプUの対応するパラメータタイプの消去のサブクラスまたはサブインターフェースのサブタイプ。そうでない場合はClassCastExceptionがスローされます。

  • クラスは、上記の関数型または他のインタフェース型の他のメソッドをオーバーライドしませんが、Objectクラスのメソッドをオーバーライドすることができます。
関連する問題