3
我知道我可以用得到的包圍類的實例:如何通過內部類實例訪問OuterClass?
OuterClass.this
但我只能在內部類代碼本身做到這一點。只有我有參考的內部類實例與另一個類代碼。如何通過內部類實例獲取OuterClass實例?
我知道我可以用得到的包圍類的實例:如何通過內部類實例訪問OuterClass?
OuterClass.this
但我只能在內部類代碼本身做到這一點。只有我有參考的內部類實例與另一個類代碼。如何通過內部類實例獲取OuterClass實例?
您可以定義返回OuterClass
給主叫來自外部的吸氣劑:
public class InnerClass {
...
public OuterClass getOuterInstance() {
return OuterClass.this;
}
}
你可以(但你不應該)使用反射作業:
import java.lang.reflect.Field;
public class Outer {
public class Inner {
}
public static void main(String[] args) throws Exception {
// Create the inner instance
Inner inner = new Outer().new Inner();
// Get the implicit reference from the inner to the outer instance
// ... make it accessible, as it has default visibility
Field field = Inner.class.getDeclaredField("this$0");
field.setAccessible(true);
// Dereference and cast it
Outer outer = (Outer) field.get(inner);
System.out.println(outer);
}
}
當然,隱含引用的名稱是完全不可靠的,所以正如我所說的,你不應該:-)
儘管實際上可以做到這一點(有趣的問題!),但你應該重新考慮喲你的設計(或張貼一個合理的例子,這種訪問真的需要) – 2013-03-06 16:51:30
這是一個很好的答案這個問題:http://stackoverflow.com/questions/1816458/getting-hold-of-the-outer-class-object - 從最內級的對象 – tdedecko 2013-03-06 17:01:50