Hiçbir şey almayan ve hiçbir şey döndürmeyen bir yöntem için Java 8 işlevsel arabirimi nedir?
Yani, C # parametresiz için eşdeğer Action
olan void
dönüş türü?
Hiçbir şey almayan ve hiçbir şey döndürmeyen bir yöntem için Java 8 işlevsel arabirimi nedir?
Yani, C # parametresiz için eşdeğer Action
olan void
dönüş türü?
Yanıtlar:
Doğru anladıysam, bir yöntemle işlevsel bir arayüz istiyorsunuz void m()
. Bu durumda, basitçe bir Runnable
.
Runnable
ile açıklanmıştır @FunctionalInterface
ve (ii) bir lambda ifadesi bağlamında bile, bir evre üzerinde çalıştırılacaktır:
Runnable
yalnızca bağlamları dizmek için değil, bu amaçla kullanılması amaçlandığını doğruladı .
Sadece kendin yap
@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();
};
}
}
ve böyle kullan
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();
}
ve çıktı
HelloWorld
WorldHello
@FunctionalInterface yalnızca yöntem soyut yöntemine izin verir.Bu nedenle, aşağıdaki gibi lambda ifadesi ile bu arabirimi başlatabilir ve arabirim üyelerine erişebilirsiniz.
@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
arayüzünün belirtimi,Thread
sınıfa çalıştırılabilir kod sağlamak olduğunu belirtir .Runnable
Bir iş parçacığı tarafından yürütülmesi amaçlanmayan yerlerde kullanmak bana doğru görünmüyor ; yanıltıcı görünüyor.Runnable
olarak tanımlanırFunctionalInterface
çünkü işlevsel bir arayüzün özelliklerini karşılar ve lambda sözdizimi kullanılarak oluşturulabilir. Neden kendi işlevsel arayüzünüzü oluşturmuyorsunuz? bkz. Runnable , bkz. FunctionalInterface