我在这里遇到了一个奇怪的结果,并不确定它是Java中的错误还是预期的行为。我有一个内部类,我已经使用反射来获取声明的字段(class.getDeclaredFields())。但是,当我遍历字段列表并检查单个类型时,“this”字段将返回外部类而不是内部类。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
我预计在$ 0是类型OuterClass.InnerClass的。
这是一个Java错误?无论如何要解决这种意外的行为?
谢谢,
埃里克
99.99%,你几乎可以认为它不与被数以百万计的世界各地的开发框架的错误。 – StriplingWarrior
我同意。不过,我之前在SO上看到过类似的帖子,指出Java7中修正了这个指针的一个错误,所以这让我感到惊讶。 (http://stackoverflow.com/questions/4823278/inner-class-type-parameter-bound-by-enclosing-class-type-variable) –
'这个$ 0'是对外部类对象的引用。它本身不需要对Inner类对象的引用。即'this' –