Yansıtma ile Sınıf İnceleme
Çalışma zamanında Class nesnelerini alın; alanları, yöntemleri, yapıcıları ve ek açıklamaları inceleyin.
Yansıtma ile Sınıf İnceleme, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. 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.
Yansıma Nedir?
Yansıma, bir Java programının çalışma zamanında kendi yapısını incelemesine ve değiştirmesine olanak tanır — derleme zamanında bilinmelerine gerek olmadan sınıf adlarını, alanları, metotları, oluşturucuları ve ek açıklamaları okumayı sağlar.
Class Nesnesi Edinme
Bir Class<?> nesnesini sınıf sabiti, getClass() veya Class.forName() aracılığıyla edinin.
Class<String> c1 = String.class; // literal
Class<?> c2 = "hello".getClass(); // from instance
Class<?> c3 = Class.forName("java.util.ArrayList"); // by nameSınıf Üst Verilerini İnceleme
Class nesnesinden sınıf adını, paketini, üst sınıfını ve uyguladığı arayüzleri alın.
Class<?> c = ArrayList.class;
System.out.println(c.getName()); // java.util.ArrayList
System.out.println(c.getSimpleName()); // ArrayList
System.out.println(c.getSuperclass()); // class java.util.AbstractList
for (Class<?> iface : c.getInterfaces()) System.out.println(iface.getName());Bildirilmiş Alanları Listeleme
getDeclaredFields(), sınıfta bildirilen tüm alanları (özel olanlar dahil) döndürür. getFields() ise devralınanlar dahil yalnızca genel alanları döndürür.
for (Field f : User.class.getDeclaredFields()) {
System.out.printf("%-10s %s%n", f.getType().getSimpleName(), f.getName());
}Methodları Listeleme
getDeclaredMethods(), tüm metotları (her erişim düzeyindeki) listeler. Devralınanlar dahil genel metotlar için getMethods() kullanın.
for (Method m : String.class.getDeclaredMethods()) {
System.out.println(m.getName() + " -> " + m.getReturnType().getSimpleName());
}Method Parametrelerini İnceleme
Parametre türlerini, adlarını (-parameters derleyici seçeneği gerektirir) ve ek açıklamalarını alın.
Method m = UserService.class.getDeclaredMethod("findById", Long.class);
for (Parameter p : m.getParameters()) {
System.out.println(p.getType().getSimpleName() + " " + p.getName());
}Oluşturucuları Listeleme
Oluşturucuları metotlarda olduğu gibi inceleyin. getDeclaredConstructors(), tekil nesnelerde veya oluşturucu desenlerinde kullanılan özel oluşturucuları da içerir.
for (Constructor<?> c : User.class.getDeclaredConstructors()) {
System.out.println(Arrays.toString(c.getParameterTypes()));
}Ek Açıklamaları Okuma
Sınıf, metot veya alan üzerindeki ek açıklamaları alın. Varlıklarını isAnnotationPresent ile kontrol edin ve değerlerini getAnnotation ile alın.
@RestController
@RequestMapping("/users")
public class UserController {}
// Inspection:
RequestMapping rm = UserController.class.getAnnotation(RequestMapping.class);
if (rm != null) System.out.println("Path: " + Arrays.toString(rm.value()));Değiştiricileri Kontrol Etme
Görünürlüğe göre filtrelemek için alan, metot ve sınıf değiştiricileri üzerinde Modifier.isPublic(), isStatic(), isFinal() vb. kullanın.
for (Field f : User.class.getDeclaredFields()) {
int mod = f.getModifiers();
if (Modifier.isPrivate(mod)) System.out.println("private: " + f.getName());
}isAssignableFrom ve instanceof Kontrolü
Tür uyumluluğunu programatik olarak kontrol etmek için Class.isAssignableFrom() kullanın — bu, yalnızca çalışma zamanında bilinen sınıf nesneleriyle yapılan instanceof denetimine denktir.
Class<?> parent = Collection.class;
Class<?> child = ArrayList.class;
System.out.println(parent.isAssignableFrom(child)); // true
System.out.println(child.isAssignableFrom(parent)); // falsePerformans Uyarısı
Basit alan ve metot erişimlerinde yansıma, doğrudan koddan 10–50 kat daha yavaştır. Field ve Method nesnelerini önbelleğe alın; setAccessible(true) çağrısını bir kez yapıp yeniden kullanın.
private static final Field NAME_FIELD;
static {
try { NAME_FIELD = User.class.getDeclaredField("name"); NAME_FIELD.setAccessible(true); }
catch (NoSuchFieldException e) { throw new RuntimeException(e); }
}Kısa Kontrol
Bir sınıfın özel alanlarını (ancak devralınan alanlarını değil) hangi metot döndürür?
Özet
Class nesnesini sınıf sabitleri veya forName() aracılığıyla edinin. Tüm erişim düzeylerini incelemek için getDeclaredFields/Methods/Constructors kullanın. Ek açıklamalarını getAnnotation ile okuyun. Performans için yansıma nesnelerini önbelleğe alın.
Sıkça Sorulan Sorular
“Yansıtma ile Sınıf İnceleme” dersi ücretsiz mi?
Evet — “Yansıtma ile Sınıf İnceleme” 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.
“Yansıtma ile Sınıf İnceleme” dersinde ne öğreneceğim?
Çalışma zamanında Class nesnelerini alın; alanları, yöntemleri, yapıcıları ve ek açıklamaları inceleyin. 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 1. dersidir.
“Yansıtma ile Sınıf İnceleme” 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
- Yansıtma ile Sınıf İnceleme
- Yöntemleri Çağırma ve Alanlara Erişme
- InvocationHandler ile Dinamik Vekiller
- Yansıtma Performansı ve Alternatifleri