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