invoke
- Java kursu
- İleri seviye
- Ders 28/82
- 5 dk
Method.invoke ile dinamik çağrıyı öğrenirsin.
Method.invoke ile çağrı
Bir Method nesnesini çalışma anında çağırmak için invoke kullanılır. İlk parametre hedef örnek, sonra gelenler yöntemin parametreleridir.
Örnek: Object result = m.invoke(target, args). Burada target yöntemin çağrılacağı örnek, args ise parametreler dizisidir. Statik yöntemler için target null olabilir. Dönüş değeri Object olarak döner; gerekiyorsa cast edilir.
Private yöntemleri çağırma
Private bir yöntemi çağırmak için önce setAccessible(true) gerekir. Bu, erişim denetimini atlatır; böylece invoke çalışır.
Örnek: m.setAccessible(true); m.invoke(target). Bu desen, kütüphane ve test kodlarında gizli yöntemlere erişmek için kullanılır. Modül sisteminde bazı kısıtlamalar olsa da, tek dosyalık uygulamalarda setAccessible genelde çalışır. Üretim kodunda dikkatli kullanılmalıdır; kapsüllemeyi bozabilir.
Uygulama String.length yöntemini invoke et
"Merhaba" dizgisini bir String değişkenine ata. String.class.getMethod("length") ile length yöntemini bul. m.invoke(s) ile çağır ve sonucu System.out.println ile yazdır. main imzasına throws Exception ekle.
Başlangıç kodu
import java.lang.reflect.Method;
// "Merhaba" dizgisini String değişkenine ata
// getMethod ile length yöntemini bul
// invoke ile çağır ve sonucu yazdırÖrnek çözüm
import java.lang.reflect.Method;
public class InvokeLength {
public static void main(String[] args) throws Exception {
String s = "Merhaba";
Method m = String.class.getMethod("length");
System.out.println(m.invoke(s));
}
}Beklenen çıktı
7
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 invoke çağrısını tamamla
Object result = method.____(target, args);
Object result = method.invoke(target, args);
Açıklama: invoke bir yöntemi çağırır.
2 invoke kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
invoke |
Yöntemi çağır |
setAccessible |
Erişimi aç |
getMethod |
Yöntem bul |
IllegalAccessException |
Erişim engeli |
3 Erişilemeyen bir yöntem invoke edilince hangi istisna fırlar?
- NullPointerException
- ClassCastException
- IOException
- IllegalAccessException Doğru cevap
Açıklama: IllegalAccessException erişim engelinde fırlar.