구글에서 찾은 답변(http://groups.google.co.kr/groups?hl=ko&lr=&ie=UTF-8&oe=UTF-8&newwindow=1&threadm=3A1C1C6E.37E63FFD%40cwcom.net&rnum=4&prev=/groups%3Fq%3Djava%2Breflection%2Binnerclass%26hl%3Dko%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26newwindow%3D1%26selm%3D3A1C1C6E.37E63FFD%2540cwcom.net%26rnum%3D4)
innerclass 에서는 기본적으로 Inner Class 를 포함하고 있는 상위클래스의 레퍼런스가 생성자로 들어간다. 마치 C++ 에서 메소드들에 대해 this 가 기본 파라메터로 넘어가는 것과 같은 이치랄까.
~cpp
import java.lang.reflect.Constructor;
public class InnerConstructorTest {
public static void main(String[] args) {
try {
Class outerClass = Class.forName("Outer");
Object outer = outerClass.newInstance();
Class innerClass = Class.forName("Outer$Inner");
Class[] consParamClasses = new Class[]{outerClass};
Constructor innerCons =
innerClass.getDeclaredConstructor(consParamClasses);
Object[] consParams = new Object[]{outer};
Object inner = innerCons.newInstance(consParams);
System.out.println(inner.toString());
} catch (Exception e) {
System.out.println("Exception: " + e.getMessage());
}
}
}
class Outer {
int y = 3;
class Inner {
public String toString() {
return "" + y;
}
}
}