İpucu

Reflection APIsi ile Inner Class'ın Constructor'un Elde Edilmesi

Java'da refelection API ise ile public olmayan kurucuları da getDeclaredConstructor(..) yöntemi ile alınmaktadır. Aşağıda bir outer ve içinde de bir inner sınıf örneği görülmektedir:
public class OuterTest{
	public class InnerTest{
		InnerTest(String test){
			System.out.println(test);
		}
	}
}
InnerTest sınıfının kurucusunu reflection ile aşağıdaki gibi alabiliriz ve instance'nı yaratabiliriz :
Class enclosingClass = Class.forName("com.fibiler.test.OuterTest");
Object enclosingInstance = enclosingClass.newInstance();
Class innerClass = Class.forName("com.fibiler.test.OuterTest$InnerTest");
Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass,String.class);
Object innerInstance = ctor.newInstance(enclosingInstance,"test");
Dikkat edilirse getDeclaredConstructor() yöntemine outer sınıfı, Class olarak verilmektedir. Instance yaratırken (newInstance) ise outer sınıfının nesnesi ilk parametre olarak verilmektedir. Bu durum InnerTest sınıfının başka bir sınıfın içinde bulunan bir sınıf olmasından kaynaklanmaktadır. Örneğin inner class olmayan OuterTest sınıfının kurucusunu ve instance'nı aşağıdaki gibi yaratabiliriz :
Class enclosingClass = Class.forName("com.fibiler.test.OuterTest");
Constructor<?> outerCounstuctor = enclosingClass.getDeclaredConstructor();
Object outerInstance = outerCounstuctor.newInstance();

Görüldüğü gibi getDeclaredConstructor ve newInstance method'ları herhangi bir outer sınıfı olmadığı için fazladan parametre almamaktadır.
zafer.teker , 14.06.2022

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir



Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir