답변:
내가 올바르게 이해하면 메소드와 기능적 인터페이스를 원합니다 void m()
. 어떤 경우에는 간단히 Runnable
.
Runnable
주석이 추가 @FunctionalInterface
되고 (ii) 람다 표현식의 컨텍스트에서도 스레드에서 실행됩니다. 현재 스레드 일 수있는 람다가 실행되는 스레드 ...
Runnable
는 스레딩 컨텍스트뿐만 아니라 이러한 목적으로 사용되도록 의도 되었음을 확인했습니다 .
당신 만의
@FunctionalInterface
public interface Procedure {
void run();
default Procedure andThen(Procedure after){
return () -> {
this.run();
after.run();
};
}
default Procedure compose(Procedure before){
return () -> {
before.run();
this.run();
};
}
}
이렇게 사용하세요
public static void main(String[] args){
Procedure procedure1 = () -> System.out.print("Hello");
Procedure procedure2 = () -> System.out.print("World");
procedure1.andThen(procedure2).run();
System.out.println();
procedure1.compose(procedure2).run();
}
및 출력
HelloWorld
WorldHello
@FunctionalInterface는 메서드 추상 메서드 만 허용하므로 아래와 같이 람다 식으로 해당 인터페이스를 인스턴스화 할 수 있으며 인터페이스 멤버에 액세스 할 수 있습니다.
@FunctionalInterface
interface Hai {
void m2();
static void m1() {
System.out.println("i m1 method:::");
}
default void log(String str) {
System.out.println("i am log method:::" + str);
}
}
public class Hello {
public static void main(String[] args) {
Hai hai = () -> {};
hai.log("lets do it.");
Hai.m1();
}
}
output:
i am log method:::lets do it.
i m1 method:::
Runnable
의 인터페이스 사양은Thread
클래스에 실행 가능한 코드를 제공한다는 것을 나타냅니다 .Runnable
스레드에 의해 실행되지 않는 곳 에서 사용 하는 것은 나에게 옳지 않은 것 같습니다 . 오해의 소지가있는 것 같습니다. 기능 인터페이스의 사양을 충족하고 람다 구문을 사용하여 생성 할 수 있기 때문에Runnable
로 정의됩니다FunctionalInterface
. 자신 만의 기능적 인터페이스를 만들어 보지 않겠습니까? Runnable 참조 , FunctionalInterface