2017-10-10 5 views
1

私は、Javaを学習し、最近では正常に動作している次のコードに出会いましたが、なぜ私は理解していないよ:Javaの内部インタフェース

public class ExecutionChain<Result> { 

    Parametriezed1<Result> classMethod1() { 
     return this::method1; 
    } 

    Parametriezed2<Result> method1() { 
     return this::method2; 
    } 

    Result method2(Result result) { 
     return result; 
    } 

    interface Parametriezed1<Result> { 
     Parametriezed2 method1(); 
    } 

    interface Parametriezed2<Result> { 
     Result method2(Result result); 
    } 
} 

誰かが説明してくださいでした:

  • method1が、事実にもかかわらず、this::method1を呼び出すためにOKである理由Parametriezed1
  • を実装ExecutionChainずにParametriezed2 method1()をオーバーライドしているように見える理由method1method2も返さないParametriezed1タイプですか?

ここで使用されていた原則については、いくつかのドキュメントに感謝しています。

+1

* FYI:*そのコードは**悪い**です。 'Parametriezed1'の' method1() 'の戻り型は** raw ** genericを返しています。 *非常に悪い!* – Andreas

答えて

0

どちらのインターフェイスにも1つのメソッドしか含まれていないため、正しいシグネチャを持つ単一の関数で実装できます。つまり、FunctionalInterfaceになります。

インターフェイスを返すメソッドは、正しいシグネチャでメソッドを返します。

クラス自体はインターフェイスを実装しません。これを行うには、メソッドも同じ名前を持つ必要があります。おそらくクラスのメソッドのサブセットを返すと考えてください。

私に尋ねるとかなり複雑なコードです。

+0

これらのインターフェースが機能インターフェースであることを指摘してくれてありがとう。彼らはマークされていない、私はそれに気づかなかった:) – nibsa

関連する問題