Каков функциональный интерфейс Java 8 для метода, который ничего не берет и ничего не возвращает?
То есть, эквивалент C # без параметров Action
с типом возвращаемого значения void
?
3 ответа
Если я правильно понял, вам нужен функциональный интерфейс с методом void m()
. В этом случае вы можете просто использовать 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();
}
}
Выход:
i am log method:::lets do it.
i m1 method:::
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
Runnable
указывает, что он должен предоставить исполняемый код классуThread
. Мне кажется неправильным использоватьRunnable
там, где он не предназначен для выполнения потоком; кажется вводящим в заблуждение.Runnable
определяется какFunctionalInterface
, потому что он соответствует спецификации функционального интерфейса и может быть создан с использованием синтаксиса лямбда. Почему бы не создать свой собственный функциональный интерфейс? см. Runnable, см. FunctionalInterfaceRunnable
аннотируется@FunctionalInterface
и (ii) даже в контексте лямбда-выражения он будет выполняться в потоке: поток, в котором выполняется лямбда, который может быть текущим потоком ...Runnable
предназначен для использования для этой цели, а не только для контекстов многопоточности.