@FunctionalInterface
- Java kursu
- İleri seviye
- Ders 17/82
- 5 dk
@FunctionalInterface ile işaretleme öğrenirsin.
@FunctionalInterface annotation'ı
@FunctionalInterface annotation'ı, bir arayüzün tek soyut yöntemi (SAM) olduğunu bildirir. Bu, derleyicinin yanlışlıkla ikinci bir soyut yöntem eklenmesini engellemesini sağlar.
Örnek: @FunctionalInterface interface StringOp { String apply(String s); }. Burada apply tek soyut yöntemdir. Arayüze ikinci bir soyut yöntem eklersen derleme hatası alırsın. Bu annotation zorunlu değildir; ama tek soyut yöntem şartını korumak için iyi bir uygulamadır.
java.util.function paketi
Java'nın java.util.function paketi yaygın işlevsel arayüzler içerir. Function, Predicate, Consumer ve Supplier'ın yanı sıra, ilkel türler için özelleşmiş sürümler de vardır.
Örneğin IntFunction<R>, int alıp R döndürür; IntPredicate ise int alıp boolean döndürür. Bu özelleşmiş arayüzler kutulama (boxing) yükünü azaltır. Yeni arayüz tanımlamadan önce pakette hazır olanı aramak iyi bir uygulamadır.
Uygulama Özel işlevsel arayüz tanımla ve kullan
@FunctionalInterface ile MathOp arayüzü tanımla; int apply(int a, int b) yöntemi olsun. main içinde toplama lambdasını (a, b) -> a + b ile MathOp değişkenine ata. apply(3, 4) çağrısının sonucunu System.out.println ile yazdır.
Başlangıç kodu
// MathOp arayüzünü tanımla (tek soyut yöntem ile)
// apply(int a, int b) yöntemi olsun
// main içinde lambda ile topla, sonucu yazdırÖrnek çözüm
@FunctionalInterface
interface MathOp {
int apply(int a, int b);
}
public class CustomFunc {
public static void main(String[] args) {
MathOp add = (a, b) -> a + b;
System.out.println(add.apply(3, 4));
}
}Beklenen çıktı
7
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 @FunctionalInterface koşullarını eşleştir
| Kavram | Anlamı |
|---|---|
@FunctionalInterface |
Tek soyut yöntem |
Single Abstract Method |
SAM tipi |
default |
Gövdeli yöntem |
static |
Sınıf yöntemi |
2 @FunctionalInterface işaretli bir arayüzde en fazla kaç soyut yöntem bulunur?
- Bir Doğru cevap
- İki
- Sınırsız
- Üç
Açıklama: Tam bir soyut yöntem bulunmalıdır.
3 annotation'ı tamamla
@____
interface MathOp {
int apply(int a, int b);
}
@FunctionalInterface
interface MathOp {
int apply(int a, int b);
}
Açıklama: @FunctionalInterface tek soyut yöntemi garanti eder.