2017-10-06 5 views
3

私は次の行がテストキュータのメンバ変数のインスタンスを作成するために使用されたプロジェクトに取り組んでいます:"Runnable :: run" - これはExecutorインスタンスをどのように作成していますか?

private Executor executor = Runnable::run;

コードが実行され、コンパイルが、私はRunnable::runはのインスタンスを作成する方法を理解していませんExecutorはどちらも異なるインターフェイスです。

誰でも説明できますか?特に:

  • Runnableの実装はどこから来たのですか?
  • Executor実装にはどのように割り当てられますか(Executorは異なるインターフェイスなので)?
  • どのような種類のExecutorが作成されましたか?例えばシングルスレッドまたはプール
  • これはJava 8より前にどのように書かれますか?

ありがとうございます。

+3

を[方法リファレンス](https://docs.oracle。 com/javase/tutorial/java/javaOO/methodreferences.html)。 –

答えて

4

Executor@FunctionalInterfaceです:

public interface Executor { 
    void execute(Runnable command); 
} 

あなたは再書き込みができ、それはこのように、実際にはおそらくそれをよりよく理解するために:

Executor executor = (Runnable r) -> r.run(); // or Runnable::run 
+0

返信いただきありがとうございます。 Runnable実装はどこから提供されますか?例えばrはどこでインスタンス化されますか? –

+0

@ T.R。ラムダ式がどのようなもので、メソッド参照が何かを読む必要があるようです。 – Eugene

+2

@ T.R。 https://stackoverflow.com/documentation/java/91/lambda-expressions#t=201710061344575761531 – Eugene

関連する問題