이상한 결과가 나옵니다. Java의 버그인지 또는 예상되는 동작인지 확실하지 않습니다. 선언 된 필드 (class.getDeclaredFields())를 가져 오기 위해 리플렉션을 사용하는 내부 클래스가 있습니다. 그러나 필드 목록을 반복하고 개별 유형을 확인하면 "this"필드가 inner 클래스가 아닌 outerclass를 반환합니다.JDK6의 내부 클래스에서 "this"의 필드 유형이 잘못 되었습니까?
이 예상되는 동작입니까? 나에게 꽤 이상한 것 같습니다.
예 :
import java.lang.reflect.Field;
public class OuterClass {
public class InnerClass{
public String innerClassString;
public InnerClass innerClass;
}
public static void main(String[] args) {
// print the fields of the inner class
for(Field field : OuterClass.InnerClass.class.getDeclaredFields())
System.out.println(field.getName() + " ::: " + field.getType());
}
}
출력 :
innerClassString ::: class java.lang.String
innerClass ::: class OuterClass$InnerClass
this$0 ::: class OuterClass
나는 형 OuterClass.InnerClass 될이 $ 0 예상했다.
이것은 Java 버그입니까? 어쨌든이 예기치 않은 동작을 해결할 수 있습니까?
감사합니다,
에릭
99.99 %, 당신은 꽤 많이는 전 세계 수백만의 개발자에 의해 사용되는 프레임 워크 버그가 아니라고 가정 할 수있다. – StriplingWarrior
동의합니다. 그러나 이전에 비슷한 점을 보았는데이 포인터는 Java7에서 수정 된이 포인터로 버그를 표시하여 궁금해졌습니다. (http://stackoverflow.com/questions/4823278/inner-class-type-parameter-bound-by-enclosing-class-type-variable) –
'this $ 0'은 외부 클래스 객체에 대한 참조입니다. Inner 클래스 객체 자체에 대한 참조가 필요하지 않습니다. 즉 'this' –