二項堆 (BinomialHeap) 克隆方法中,遞歸複製樹節點 (BinomialHeapEntry) 時隱含 Bug:
private BinomialHeapEntry cloneBinomialTree(BinomialHeapEntry root) {
BinomialHeapEntry newRoot = new BinomialHeapEntry(root.element()); // 此處隱式調用 this.new BinomialHeapEntry()
// ...
}
this$0new BinomialHeapEntry() 等價於 this.new BinomialHeapEntry(),綁定當前外部類實例this 指向原堆,導致新節點 this$0 指向原堆而非新堆在克隆方法中使用新堆實例創建內部類節點:
// 原錯誤調用
BinomialHeapEntry newRoot = cloneBinomialTree(root);
// 修正:通過 clone 實例調用,綁定新堆
BinomialHeapEntry newRoot = clone.cloneBinomialTree(root);
同理,遞歸內部調用也需傳遞正確外部實例上下文。
static 靜態嵌套類,消除 this$0 依賴outer.new Inner() 或 Outer.this.new Inner()this$0 還原正確性內部類 this$0 隱式引用是 Java 實現閉包的基石,但在對象圖複製、序列化、多實例隔離場景下極易產生隱蔽 Bug。代碼審查時重點關注 new InnerClass() 出現的上下文,確保綁定目標外部實例。