Yerel ve Anonim Sınıflar
Yöntemlerin içinde sınıflar bildirin ve arayüzlerin anonim uygulamalarını anında oluşturun.
Yerel ve Anonim Sınıflar, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 3. 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.
Yerel ve Anonim Sınıflar
Yerel sınıflar bir yöntemin içinde tanımlanır. Anonim sınıflar adı olmayan yerel sınıflardır; sınıf bildirimini ve örnek oluşturmayı birleştirirler. Her ikisi de başlatıldıktan sonra yeniden atanmayan yerel değişkenleri yakalar.
Yerel Sınıf Bildirimi
Yerel bir sınıf, bir yöntem gövdesinin içinde bildirilir. Kendini çevreleyen sınıfın üyelerine ve başlatıldıktan sonra yeniden atanmayan yerel değişkenlere erişebilir.
static void greet(String language) {
// Local class — defined inside the method
class Greeter {
String sayHello(String name) {
// Can access 'language' — it is effectively final
return switch (language) {
case "EN" -> "Hello, " + name;
case "ES" -> "Hola, " + name;
case "FR" -> "Bonjour, " + name;
default -> "Hi, " + name;
};
}
}
Greeter g = new Greeter();
System.out.println(g.sayHello("Alice"));
}
greet("ES"); // Hola, AliceFiilen Sabit Değişkenler
Yerel ve anonim sınıflar yalnızca fiilen sabit olan yerel değişkenleri yakalayabilir; bu değişkenlere başlatıldıktan sonra hiçbir zaman yeniden değer atanmaz.
void process(int threshold) {
// threshold is effectively final (never reassigned)
Runnable r = new Runnable() {
public void run() {
System.out.println("Threshold: " + threshold);
}
};
r.run();
// threshold = 10; // If you add this, the anonymous class won't compile
}Anonim Sınıfın Temelleri
Anonim bir sınıf, tek bir ifade içinde, satır üzerinde bir arayüzü uygular veya bir sınıfı genişletir.
interface Comparator<T> {
int compare(T a, T b);
}
// Anonymous class implementing Comparator
java.util.Comparator<String> byLength = new java.util.Comparator<String>() {
@Override
public int compare(String a, String b) {
return Integer.compare(a.length(), b.length());
}
};
List<String> words = new ArrayList<>(List.of("banana", "fig", "apple", "kiwi"));
words.sort(byLength);
System.out.println(words); // [fig, kiwi, apple, banana]Anonim Sınıf ve Lambda
Tek soyut yöntemli (SAM) arayüzler için lambda ifadeleri anonim sınıfların yerini alır. Birden çok yönteme sahip arayüzlerde veya soyut sınıfları genişletirken anonim sınıflar hâlâ gereklidir.
// Anonymous class for single-method interface
Runnable r1 = new Runnable() {
public void run() { System.out.println("Running!"); }
};
// Lambda — cleaner for SAM interfaces
Runnable r2 = () -> System.out.println("Running!");
// Must use anonymous class for multi-method interface:
java.io.FilenameFilter filter = new java.io.FilenameFilter() {
public boolean accept(java.io.File dir, String name) {
return name.endsWith(".java");
}
}; // FilenameFilter is not a SAM — no lambda shorthandDurum Tutan Anonim Sınıf
Anonim sınıflar, lambdaların aksine alanlara sahip olabilir. Bu özellik, anonim uygulamanın kendi içinde durumu korumanız gerektiğinde kullanışlıdır.
interface Counter { int increment(); int get(); }
Counter counter = new Counter() {
private int count = 0;
public int increment() { return ++count; }
public int get() { return count; }
};
System.out.println(counter.increment()); // 1
System.out.println(counter.increment()); // 2
System.out.println(counter.get()); // 2Anonim Dinleyici Kalıbı
Lambdalardan önce anonim sınıflar, GUI ve Android programlamada olay dinleyicileri için standart kalıptı.
// Modern Android/Swing style: anonymous class listener
Button loginButton = new Button(); // hypothetical
loginButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick() {
System.out.println("Login button clicked!");
}
});
// Modern equivalent with lambda (if OnClickListener is SAM):
loginButton.setOnClickListener(() -> System.out.println("Clicked!"));Karmaşık Mantık için Yerel Sınıf
Yerel sınıflar, yalnızca tek bir yerde birden çok yönteme sahip bir sınıfa ihtiyaç duyduğunuzda iyi çalışır; lambda için fazla karmaşık, üst düzey bir sınıf içinse fazla özeldir.
static List<String> processData(List<String> data, String prefix) {
// Local class: complex enough for a class, used only here
class DataProcessor {
List<String> result = new ArrayList<>();
void process(String item) {
// prefix is effectively final
if (item.startsWith(prefix)) {
result.add(item.toUpperCase());
}
}
}
DataProcessor dp = new DataProcessor();
data.forEach(dp::process);
return dp.result;
}
System.out.println(processData(List.of("apple","avocado","banana"), "a"));
// [APPLE, AVOCADO]Soyut Sınıf için Anonim Sınıf
Anonim sınıflar soyut sınıfları genişletebilir ve adlandırılmış bir alt sınıf oluşturmadan soyut yöntemleri geçersiz kılabilir.
abstract class ReportFormatter {
abstract String formatHeader(String title);
abstract String formatBody(List<String> rows);
String format(String title, List<String> rows) {
return formatHeader(title) + "\n" + formatBody(rows);
}
}
ReportFormatter csvFormatter = new ReportFormatter() {
public String formatHeader(String t) { return "\"" + t + "\""; }
public String formatBody(List<String> rows) {
return String.join("\n", rows);
}
};
System.out.println(csvFormatter.format("Sales", List.of("a,1","b,2")));Çift Süslü Parantezle Başlatma Karşıt Deseni
Çift süslü parantezle başlatma yöntemi, koleksiyonları başlatmak için anonim sınıfları kullanır. Örnek başlatıcısına sahip bir alt sınıf oluşturur. Bundan kaçının; verimsiz ve hataya açıktır.
// Anti-pattern: double-brace initialization
Map<String, Integer> map = new HashMap<String, Integer>() {{
put("a", 1);
put("b", 2);
}};
// Creates an anonymous HashMap subclass — wasteful!
// GOOD: use Map.of() or Map.ofEntries()
Map<String, Integer> better = Map.of("a", 1, "b", 2);
// Or a mutable map:
Map<String, Integer> mutable = new HashMap<>(Map.of("a", 1, "b", 2));Seçim: Lambda mı, Anonim Sınıf mı, Yerel Sınıf mı
Karar rehberi:
- Lambda: tek soyut yöntem, ek durum yok, kalıtım yok
- Anonim sınıf: birden çok yöntem, durum gereksinimi veya soyut sınıfı genişletme
- Yerel sınıf: yöntem içinde yeniden kullanım, birden çok yöntem veya karmaşık durum gereksinimi
Hızlı Kontrol
Anonim bir sınıf, tek bir ifade içinde her zaman ne yapar?
Özet: Yerel ve Anonim Sınıflar
Temel çıkarımlar:
- Yerel sınıflar yöntemlerin içinde tanımlanır ve başlatıldıktan sonra yeniden atanmayan yerel değişkenlere erişebilir
- Anonim sınıflar, sınıf bildirimini ve örnek oluşturmayı tek bir ifadede birleştirir
- Anonim sınıflar, lambdaların aksine alanlara ve birden çok yönteme sahip olabilir
- Lambdalar, tek soyut yöntemli arayüzlerde anonim sınıfların yerini alır
- Mantık bir sınıfı gerektirecek kadar karmaşık, ancak tek bir yönteme özgü olduğunda yerel sınıfları kullanın
- Çift süslü parantezle başlatmadan kaçının; gereksiz anonim alt sınıflar oluşturur
Yapay zeka eğitmeniyle Java öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 104
- Dersler
- 374
Sıkça Sorulan Sorular
“Yerel ve Anonim Sınıflar” dersi ücretsiz mi?
Evet — “Yerel ve Anonim Sınıflar” 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.
“Yerel ve Anonim Sınıflar” dersinde ne öğreneceğim?
Yöntemlerin içinde sınıflar bildirin ve arayüzlerin anonim uygulamalarını anında oluşturun. 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 3. dersidir.
“Yerel ve Anonim Sınıflar” 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
- Statik İç İçe Sınıflar
- İç Sınıflar ve Dış Sınıfa Erişim
- Yerel ve Anonim Sınıflar
- Doğru İç İçe Sınıf Stratejisini Seçme