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.