Co to jest funkcjonalny interfejs Java 8 dla metody, która nic nie pobiera i nic nie zwraca?
To znaczy odpowiednik C # bez parametrów Action
z void
typem zwracanym?
Co to jest funkcjonalny interfejs Java 8 dla metody, która nic nie pobiera i nic nie zwraca?
To znaczy odpowiednik C # bez parametrów Action
z void
typem zwracanym?
Odpowiedzi:
Jeśli dobrze rozumiem, potrzebujesz funkcjonalnego interfejsu z metodą void m()
. W takim przypadku możesz po prostu użyć pliku Runnable
.
Runnable
jest opatrzony adnotacją @FunctionalInterface
i (ii) nawet w kontekście wyrażenia lambda zostanie wykonany na wątku: wątku, w którym jest uruchamiana lambda, który może być bieżącym wątkiem ...
Runnable
ma ono służyć do tego celu, a nie tylko do wątków.
Po prostu stwórz własne
@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();
};
}
}
i używaj go w ten sposób
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();
}
i wyjście
HelloWorld
WorldHello
@FunctionalInterface zezwala tylko na metodę abstrakcyjną metody Stąd możesz utworzyć instancję tego interfejsu z wyrażeniem lambda jak poniżej i możesz uzyskać dostęp do elementów interfejsu
@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
specyfikacja interfejsu wskazuje, że ma on udostępniaćThread
klasie wykonywalny kod . Nie wydaje mi się właściwe używanieRunnable
go tam, gdzie nie jest przeznaczone do wykonania przez wątek; wydaje się mylące.Runnable
jest zdefiniowany jako a,FunctionalInterface
ponieważ spełnia specyfikację funkcjonalnego interfejsu i może być utworzony przy użyciu składni lambda. Dlaczego nie stworzyć własnego funkcjonalnego interfejsu? zobacz Runnable , zobacz FunctionalInterface