我在這裏遇到了一個奇怪的結果,並不確定它是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' –