2014-02-21 51 views
4

java.util.ArrayList.SubList是java.util.ArrayList的非靜態內部類類,這意味着它保存對其封閉類的引用。我們可以通過使用ArrayList.this訪問java.util.ArrayList的成員。但是java.util.ArrayList.SubList也有一個成員「parent」,它也是對java.util.ArrayList.SubList封裝類的引用。爲什麼需要「父」成員變量或爲什麼不聲明java.util.ArrayList.SubList作爲靜態內部類?爲什麼ArrayList的非靜態內部類SubList有一個成員變量「parent」?

我的JDK是最新的,和我有搜索java.util.ArrayList中的最新的源代碼谷歌。我得到以下鏈接: http://www.docjar.com/html/api/java/util/ArrayList.java.html。該頁面上的代碼與我的電腦上的代碼相同。

+5

也許它沒有開始生活作爲一個內部類,但私人/保護類,後來搬到......你應該去問設計師 – MadProgrammer

+1

謝謝。在問這個問題之前,我真的應該多想一想。當我們獲得「子列表」的「子列表」時,我認爲需要「父」。 –

+0

這個問題不應該關閉;它是具體和有效的,當然不是基於意見的。 –

回答

3

您在評論中的結論是正確的。 SubList需要parent場,因爲SubList的子列表使用SubList作爲父 - 封閉ArrayList是不是在這種情況下,家長。特別地,對於ArrayList.SubList.subList()源是:

public List<E> subList(int fromIndex, int toIndex) { 
     subListRangeCheck(fromIndex, toIndex, size); 
     return new SubList(this, offset, fromIndex, toIndex); 
    } 

注意this(一個SubList)作爲父參數到新SubList通過。

會有沒有辦法沒有明確parent現場跟蹤此。

相關問題