2014-02-21 8 views
4

java.util.ArrayList.SubList는 java.util.ArrayList의 비 정적 인 내부 클래스 클래스로, 둘러싼 클래스에 대한 참조를 보유한다는 것을 의미합니다. ArrayList.this를 사용하여 java.util.ArrayList의 멤버에 액세스 할 수 있습니다. 그러나 java.util.ArrayList.SubList에는 java.util.ArrayList.SubList의 둘러싼 클래스에 대한 참조이기도 한 "parent"멤버가 있습니다. 왜 "부모"멤버 변수가 필요하거나 java.util.ArrayList.SubList를 정적 내부 클래스로 선언하지 않는 이유는 무엇입니까?ArrayList의 정적이 아닌 내부 클래스 SubList에 멤버 변수 "parent"가있는 이유는 무엇입니까?

My JDK가 최신이며 Google에서 java.util.ArrayList의 최신 소스 코드를 검색했습니다. 다음 링크가 있습니다 : http://www.docjar.com/html/api/java/util/ArrayList.java.html. 페이지의 코드는 내 컴퓨터의 코드와 동일합니다.

+5

어쩌면 내부 클래스가 아닌 개인/보호 클래스로 생명을 시작했지만 나중에 옮겨 졌을 것입니다 ... 디자이너에게 물어봐야 할 것입니다 – MadProgrammer

+1

감사합니다. 나는이 질문을하기 전에 더 많이 생각해야했다. 나는 "하위 목록"의 "하위 목록"을 얻을 때 "부모"가 필요하다고 생각합니다. –

+0

이 질문은 종료되어서는 안됩니다. 그것은 구체적이고 타당하며 의견을 근거로 한 것이 아닙니다. –

답변

3

의견에 귀하의 결론이 정확합니다. SubList의 하위 목록은 SubList을 상위 항목으로 사용하므로 SubListparent 필드를 필요로합니다. 그 경우에는 외곽 인 ArrayList이 상위가 아닙니다. 특히 ArrayList.SubList.subList()의 소스는 : (a SubList)가 새로운 SubList에 부모로 전달되는 파라미터

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

참고 this있다.

명시 적 parent 필드 없이는 추적 할 방법이 없습니다.