public class MyClass {
public void method1() {
MyInterface iclass = this.new MyClassInner();
}
private class MyClassInner implements MyInterface { }
}
this.new MyClassInner() 表示以外部類當前實例(this)為宿主對象,創建非靜態內部類 MyClassInner 的實例。
外部類實例.new 內部類()。this 即當前外部類實例,故可簡寫為 this.new 內部類()。外部類實例 (MyClass) 內部類實例
+-------------------+ +-------------------+
| fields... | 1:N | ref to outer (隱式)|
| method1() |-------->| fields... |
+-------------------+ +-------------------+
^ ^
| this | 外部類.this 引用
+------------------------------+
Constructor> c = MyClassInner.class.getDeclaredConstructor(MyClass.class); c.newInstance(outerInstance);若內部類聲明為 static class MyStaticInner,則無需宿主對象,直接 new MyStaticInner() 即可,不持有外部類引用,更輕量、更安全。
掌握 this.new 的本質,是理解 Java 內部類機制、避免內存洩漏、正確序列化的關鍵一步。