2017-10-06 9 views
3

Je travaille sur un projet où la ligne suivante est utilisée pour créer un membre variable d'instance Executor test:"Runnable :: run" - Comment créer une instance d'Executor?

private Executor executor = Runnable::run;

Les pistes de code et compiles mais je ne comprends pas comment Runnable::run crée une instance de Executor puisque les deux sont des interfaces différentes.

Quelqu'un peut-il expliquer? En particulier:

  • D'où vient l'implémentation de Runnable?
  • Comment est-il affecté à une implémentation Executor (puisque Executor est une interface différente)?
  • Quel type de Executor est créé? par exemple. single threaded ou pooled
  • Comment cela serait-il écrit avant Java 8?

Merci.

+3

[Références Méthode] (https://docs.oracle. com/javase/tutoriel/java/javaOO/methodreferences.html). –

Répondre

4

Executor est un @FunctionalInterface:

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

Vous pouvez ré-écrire comme ceci pour comprendre réellement probablement mieux:

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

Merci d'avoir répondu. D'où vient l'implémentation Runnable? par exemple. où est r instancié? –

+0

@ T.R. Il semble que vous ayez besoin de lire un peu ce que sont l'expression lambda et les références de méthode ... – Eugene

+2

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