Що таке функціональний інтерфейс Java 8 для методу, який нічого не бере і нічого не повертає?
Тобто, що еквівалентно параметру C # Action
без void
типу повернення?
Що таке функціональний інтерфейс Java 8 для методу, який нічого не бере і нічого не повертає?
Тобто, що еквівалентно параметру C # Action
без void
типу повернення?
Відповіді:
Якщо я правильно розумію, вам потрібен функціональний інтерфейс із методом 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
визначається як a,FunctionalInterface
оскільки він відповідає специфікації функціонального інтерфейсу і може бути створений за допомогою лямбда-синтаксису. Чому б не створити власний функціональний інтерфейс? дивіться Runnable , див. FunctionalInterface