6. RxJava kütüphanesinin işlevsel arayüzleri
Observable sınıfı, asenkron RxJava kütüphanesinin temelini oluşturur. Bu sınıf, az önce tanıttığımız Stream sınıfıyla birçok benzerlik gösterir. O sınıf gibi, bu sınıf da onlarca yöntem içerir. Ve tıpkı o sınıf gibi, bu yöntemler de işlevsel arayüz örneklerini parametre olarak kabul eder. Öncelikle bunlardan en yaygın olanlarını tanıtacağız: [Actioni] ve [Funci].
6.1. Örnek-01: [Action0] işlevsel arayüzü
![]() |
[Action0] arayüzü şu şekildedir:
![]() | ![]() |
- [Action0] arayüzü, [2] imzalı tek bir call yöntemine sahiptir: void call(). Bu arayüz, [Action] ve [1, 3] arayüzlerinden türetilmiştir. [Action] arayüzünün herhangi bir yöntemi yoktur. Bu tür arayüzlere [4] işaretleyici arayüzleri denir. Bunlar esas olarak şu şekilde yazmak için kullanılır: if(c instanceOf(Action)) {...}. [Action] arayüzü ise [Function] [4-6] işaretleyici arayüzünden türetilmiştir;
![]() |
[Action0] arayüzünü aşağıdaki kodla (Örnek01) açıklayacağız:
package dvp.rxjava.lamdbas;
import rx.functions.Action0;
public class Exemple01 {
public static void main(String[] args) {
// Eylem0
Action0 a01 = new Action0() {
@Override
public void call() {
System.out.println("anonymous a01.call");
}
};
Action0 a02 = () -> System.out.println("lambda ao2.call");
// görüntüleme sayısı
a01.call();
a02.call();
}
}
- 8-13. satırlar: [Action0] arayüzünün isimsiz bir sınıfla uygulanması;
- 8-13. satırlar: [Action0] arayüzünün bir lambda ile uygulanması;
Sonuçlar şöyledir:
6.2. Örnek-02, 03: [Actioni] işlevsel arayüzü
![]() |
[Action1] arayüzü şöyledir:
![]() |
Bunu aşağıdaki kodla (Örnek 02) göstereceğiz:
package dvp.rxjava.lamdbas;
import rx.functions.Action1;
public class Exemple02 {
public static void main(String[] args) {
// Eylem1
Action1<Integer> a10 = new Action1<Integer>() {
@Override
public void call(Integer integer) {
System.out.printf("anonymous a10.call (%s)%n", integer);
}
};
Action1<Double> a11 = (d -> System.out.printf("lambda a11.call (%s)%n", d));
// çalıştırmalar
a10.call(20);
a11.call(17.4);
}
}
Bu kod şu sonucu verir:
Genel olarak, [Actioni] (0<=i<=9), tek imza yöntemine sahip işlevsel bir arayüzdür: void call(T1 t1, T2 t2, ..., Ti ti). [Action2] (Örnek03) için bir örnek aşağıda verilmiştir:
package dvp.rxjava.lamdbas;
import rx.functions.Action2;
public class Exemple03 {
public static void main(String[] args) {
// Eylem2
Action2<Integer, Double> a20 = new Action2<Integer, Double>() {
@Override
public void call(Integer integer, Double aDouble) {
System.out.printf("anonymous a20.call(%s,%s)%n", integer, aDouble);
}
};
Action2<Integer, Double> a21 = (i, d) -> System.out.printf("lambda a21.call(%s,%s)%n", i, d);
// çalıştırmalar
a20.call(10,11.3);
a21.call(5,5.6);
}
}
Elde edilen sonuç şöyledir:
6.3. Örnek-04, 05: [Funci] işlevsel arayüzü
![]() |
[Func0] arayüzü şu şekildedir:
![]() |
Bu sefer, arayüzdeki [call] yöntemi R türünde bir sonuç döndürür.
Arayüzü aşağıdaki kodla göstereceğiz:
package dvp.rxjava.lamdbas;
import rx.functions.Func0;
public class Exemple04 {
public static void main(String[] args) {
// İşlev0
Func0<String> f00 = new Func0<String>() {
@Override
public String call() {
return "anonymous f00.call";
}
};
Func0<String> f01 = () -> "lambda f01.call";
// çalıştırmalar
System.out.println(f00.call());
System.out.println(f01.call());
}
}
Bu kod, aşağıdaki sonuçları verir:
Genel olarak, [Funci] (0<=i<=9), tek imza yöntemine sahip işlevsel bir arayüzdür: R call(T1 t1, T2 t2, ..., Ti ti). [Func2] (Örnek05) için bir örnek aşağıda verilmiştir:
package dvp.rxjava.lamdbas;
import rx.functions.Func2;
public class Exemple05 {
public static void main(String[] args) {
// Func2
Func2<Integer, Double, String> f20 = new Func2<Integer, Double, String>() {
@Override
public String call(Integer integer, Double aDouble) {
return String.format("anonymous f20.call(%s,%s)", integer, aDouble);
}
};
Func2<Integer, Double, String> f21 = (i,d) -> String.format("anonymous f21.call(%s,%s)", i, d);
// görüntülemeler
System.out.println(f20.call(10,10.2));
System.out.println(f21.call(100, 100.3));
}
}
bu, aşağıdaki sonuçları verir:







