Özel İşlevsel Arayüzler
@FunctionalInterface ile kendi arayüzünüzü tanımlayın
Özel İşlevsel Arayüzler, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Bir Arayüzü İşlevsel Yapan Nedir
Bir işlevsel arayüz tam olarak bir soyut yönteme (SAM) sahiptir. Lambda'nın uyguladığı şey bu tek yöntemdir.
- Varsayılan ve statik yöntemler bu sınıra dâhil edilmez.
interface Greeter {
String greet(String name);
}
public class Main {
public static void main(String[] args) {
Greeter g = name -> "Hello, " + name;
System.out.println(g.greet("Ada"));
}
}@FunctionalInterface Açıklaması
@FunctionalInterface, derleyiciye tek soyut yöntem kuralını zorunlu kılmasını söyler. Yanlışlıkla ikinci bir soyut yöntem eklerseniz derleme başarısız olur.
@FunctionalInterface
interface Calculator {
int compute(int a, int b);
}
public class Main {
public static void main(String[] args) {
Calculator add = (a, b) -> a + b;
System.out.println(add.compute(3, 4));
}
}Açıklama Neden Yararlıdır
Açıklama, amacı belgelendirir ve sözleşmeyi korur. Açıklama olmadan da arayüz işlevsel olarak çalışır; ancak bir ekip arkadaşı başka bir soyut yöntem ekleyerek arayüzü bozabilir.
@FunctionalInterface
interface Transformer {
String apply(String input);
}
public class Main {
public static void main(String[] args) {
Transformer reverse = s -> new StringBuilder(s).reverse().toString();
System.out.println(reverse.apply("abc"));
}
}Genel Türler İçeren Özel Arayüz
Yerleşik arayüzlerde olduğu gibi arayüzünüz de genel türler kullanabilir.
@FunctionalInterface
interface Converter<S, T> {
T convert(S source);
}
public class Main {
public static void main(String[] args) {
Converter<String, Integer> toInt = Integer::parseInt;
System.out.println(toInt.convert("123") + 1);
}
}Varsayılan Yöntemlere İzin Verilir
İşlevsel bir arayüzde default yöntemleri bulunabilir. Bunlar, tek soyut yöntem kuralını bozmadan davranış ekler.
@FunctionalInterface
interface Operation {
int apply(int x);
default Operation then(Operation next) {
return x -> next.apply(this.apply(x));
}
}
public class Main {
public static void main(String[] args) {
Operation inc = x -> x + 1;
Operation dbl = x -> x * 2;
System.out.println(inc.then(dbl).apply(5));
}
}Statik Yöntemlere de İzin Verilir
Statik yöntemler, Function.identity() benzeri fabrika yöntemleri olarak görev yapabilir.
@FunctionalInterface
interface Mapper {
int map(int x);
static Mapper identity() {
return x -> x;
}
}
public class Main {
public static void main(String[] args) {
System.out.println(Mapper.identity().map(99));
}
}Denetimli İstisnalar Fırlatma
Soyut yönteminiz bir denetimli istisna bildiriyorsa lambda bunu fırlatabilir. Yerleşik Function bunu yapamaz; kendi arayüzünüzü tanımlamanızın nedenlerinden biri budur.
@FunctionalInterface
interface RiskyParser {
int parse(String s) throws NumberFormatException;
}
public class Main {
public static void main(String[] args) {
RiskyParser p = Integer::parseInt;
System.out.println(p.parse("77"));
}
}Özel Arayüzleri Yöntemlere Geçirme
Arayüzünüz bir parametre türüne dönüşür ve çağıranların davranışı lambdalar aracılığıyla sağlamasına olanak tanır.
@FunctionalInterface
interface IntCombiner {
int combine(int a, int b);
}
public class Main {
static int reduce(int[] arr, IntCombiner c) {
int acc = arr[0];
for (int i = 1; i < arr.length; i++) acc = c.combine(acc, arr[i]);
return acc;
}
public static void main(String[] args) {
int[] data = {1, 2, 3, 4};
System.out.println(reduce(data, (a, b) -> a + b));
}
}Üç Bağımsız Değişkenli Arayüz
JDK yalnızca tek ve iki bağımsız değişkenli arayüzler sunar. Üç veya daha fazla bağımsız değişken için kendi arayüzünüzü tanımlayınız.
@FunctionalInterface
interface TriFunction<A, B, C, R> {
R apply(A a, B b, C c);
}
public class Main {
public static void main(String[] args) {
TriFunction<Integer, Integer, Integer, Integer> sum3 = (a, b, c) -> a + b + c;
System.out.println(sum3.apply(1, 2, 3));
}
}Yöntem Referansları Özel Arayüzlere Uyar
İmzası SAM ile eşleşen herhangi bir yöntem, yöntem referansı olarak sağlanabilir.
@FunctionalInterface
interface StringTest {
boolean check(String s);
}
public class Main {
public static void main(String[] args) {
StringTest blank = String::isBlank;
System.out.println(blank.check(" "));
}
}Anonim Sınıf ve Lambda
Lambda, işlevsel bir arayüzü uygulayan anonim sınıfın kısa bir alternatifidir. Her ikisi de aynı davranışı üretir.
@FunctionalInterface
interface Action {
void run();
}
public class Main {
public static void main(String[] args) {
Action old = new Action() {
public void run() { System.out.println("anonymous"); }
};
Action neo = () -> System.out.println("lambda");
old.run();
neo.run();
}
}Hızlı Kontrol
@FunctionalInterface neyi garanti eder?
Özet
Kendi işlevsel arayüzlerinizi tanımladınız:
- İşlevsel bir arayüz tam olarak bir soyut yönteme (SAM) sahiptir.
@FunctionalInterface, bu kuralı derleme zamanında zorunlu kılar.- Varsayılan ve statik yöntemlere, genel türlere ve denetimli istisnalara izin verilir.
- Özel arayüzler, üç bağımsız değişkenli işlevler veya denetimli istisna fırlatan lambdalar gibi JDK'nin kapsamadığı gereksinimleri karşılar.
Sıkça Sorulan Sorular
“Özel İşlevsel Arayüzler” dersi ücretsiz mi?
Evet — “Özel İşlevsel Arayüzler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Özel İşlevsel Arayüzler” dersinde ne öğreneceğim?
@FunctionalInterface ile kendi arayüzünüzü tanımlayın Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Özel İşlevsel Arayüzler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Function ve BiFunction
- Supplier ve Consumer
- Predicate ve Birleştirme
- Özel İşlevsel Arayüzler