2017-10-06 107 views
3

我工作的地方下面的行用於創建一個測試執行成員變量實例的項目:「Runnable :: run」 - 這是如何創建一個Executor實例?

private Executor executor = Runnable::run;

代碼運行和編譯,但我不明白怎麼Runnable::run創建的實例因爲兩者都是不同的接口。

有人能解釋嗎?特別是:

  • 哪裏Runnable接口的實現從何而來?
  • 它是如何分配給Executor實現的(因爲Executor是不同的接口)?
  • 什麼樣的Executor被創建?例如單線程或彙集
  • 這將如何寫在Java 8之前?

謝謝。

+3

[方法參考文獻](https://docs.oracle。 COM/JavaSE的/教程/ 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。好像你需要讀一下lambda表達式和方法引用... – Eugene

+2

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