Yöntemleri Çağırma ve Alanlara Erişme
Özel yöntemleri çağırın ve setAccessible ile Method.invoke ve Field.set kullanarak erişilemeyen alanlara değer atayın.
Yöntemleri Çağırma ve Alanlara Erişme, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. 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.
setAccessible: Görünürlüğü Aşma
Java'nın erişim denetimini aşmak için field.setAccessible(true) veya method.setAccessible(true) çağrısını yapın. Özel üyeler için gereklidir. Java 9 ve sonrasında uygun modül erişimi gerekir.
Field f = User.class.getDeclaredField("name");
f.setAccessible(true);
User u = new User("Alice", 30);
System.out.println(f.get(u)); // "Alice"
f.set(u, "Bob"); // mutate the private field
System.out.println(u.getName()); // "Bob"Alan Değerlerini Okuma
Herhangi bir alan değerini okumak için field.get(instance) kullanın (ilkel türler kutulanır). Statik alanlar için örnek olarak null gönderin.
Field f = MyClass.class.getDeclaredField("count");
f.setAccessible(true);
int count = (int) f.get(null); // static field → null instanceAlan Değerlerini Ayarlama
Bir alana değer yazmak için field.set(instance, value) kullanın. Değerin türü eşleşmeli veya otomatik olarak kutudan çıkarılabilmelidir. Modern JVM'lerde yansıma yoluyla final bir alanı ayarlamak tanımsız davranıştır.
Field nameField = User.class.getDeclaredField("name");
nameField.setAccessible(true);
nameField.set(user, "Charlie");Yansımayla Metot Çağırma
Bir Method nesnesi alın, setAccessible(true) çağrısını yapın, ardından method.invoke(instance, args...) ile çağırın. Döndürülen değer Object türündedir.
Method greet = User.class.getDeclaredMethod("greet", String.class);
greet.setAccessible(true);
String result = (String) greet.invoke(user, "World");
System.out.println(result);InvocationTargetException İşleme
Çağrılan metot bir istisna fırlatırsa yansıma bunu InvocationTargetException ile sarar. getCause() ile sarmalamasını kaldırın.
try {
method.invoke(obj, args);
} catch (InvocationTargetException e) {
Throwable cause = e.getCause();
System.err.println("Method threw: " + cause.getMessage());
} catch (IllegalAccessException | NoSuchMethodException e) {
System.err.println("Reflection error: " + e.getMessage());
}Statik Metotları Çağırma
Statik metotları çağırırken örnek bağımsız değişkeni olarak null gönderin.
Method parseInt = Integer.class.getDeclaredMethod("parseInt", String.class);
int value = (int) parseInt.invoke(null, "42"); // null = static
System.out.println(value); // 42Oluşturucu ile Örnek Oluşturma
Bir Constructor edinin, özel olanlar için setAccessible(true) çağrısını yapın, ardından newInstance(args...) çağrısını yapın.
Constructor<User> ctor = User.class.getDeclaredConstructor(String.class, int.class);
ctor.setAccessible(true);
User u = ctor.newInstance("Diana", 28);
System.out.println(u);Çerçevelerde Yansıma: Spring DI
Spring, bileşen örnekleri oluşturmak ve bağımlılıkları enjekte etmek için yansımayı kullanır. Uygulama bağlamını birbirine bağlamak üzere özel oluşturucuları çağırır ve özel alanları ayarlar.
Java 9 ve Sonrasında Modül Erişimi
Java 9 ve sonrasında modüller, varsayılan olarak setAccessible kullanımını kısıtlar. Sınıf adlandırılmış bir modüldeyse paketi açmanız gerekebilir: --add-opens java.base/java.lang=ALL-UNNAMED.
// JVM flag to open a package for reflection:
// --add-opens java.base/java.lang=ALL-UNNAMEDDaha Hızlı Bir Seçenek Olarak MethodHandles
MethodHandles.lookup().findVirtual(), JIT iyileştirmesinden sonra doğrudan çağrıya yakın performansla yansıma tabanlı metot çağrısı sağlar. Performans açısından kritik kitaplık kodlarında tercih edilir.
MethodHandles.Lookup lookup = MethodHandles.privateLookupIn(User.class, MethodHandles.lookup());
MethodHandle handle = lookup.findVirtual(User.class, "getName", MethodType.methodType(String.class));
String name = (String) handle.invoke(user);Yansıma İçin En İyi Uygulamalar
Field/Method nesnelerini önbelleğe alın — bunları yoğun döngülerde asla yeniden almayın. Yansımayı hizmet sınıflarıyla sarmalayın. Performans için MethodHandles kullanmayı değerlendirin. Mümkün olduğunda yansıma yerine arayüzleri tercih edin.
Kısa Kontrol
Yansımayla çağrılan bir metot hata fırlattığında, sebebi hangi istisna sarar?
Özet
Özel üyelere erişmek için setAccessible(true) kullanın. Metotları method.invoke() aracılığıyla çağırın. InvocationTargetException sarmalamasını kaldırın. Yansıma nesnelerini önbelleğe alın. Yoğun kullanılan yollar için MethodHandles'ı tercih edin.
Sıkça Sorulan Sorular
“Yöntemleri Çağırma ve Alanlara Erişme” dersi ücretsiz mi?
Evet — “Yöntemleri Çağırma ve Alanlara Erişme” 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.
“Yöntemleri Çağırma ve Alanlara Erişme” dersinde ne öğreneceğim?
Özel yöntemleri çağırın ve setAccessible ile Method.invoke ve Field.set kullanarak erişilemeyen alanlara değer atayı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 2. dersidir.
“Yöntemleri Çağırma ve Alanlara Erişme” 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