2017-10-06 60 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