回覆列表
  • 1 # 使用者985235815188

    首先,考慮編寫iterator,我們需要基於哪幾個方面的考慮:

    由於迭代器會訪問List的私有域,因此,可以有2種方式:

    一種的改變List的域的可見性,讓其變成public或friendly(預設的可見性,即包可見性)的,不過這違反了良好的面向物件程式設計的羈絆原則,它要求資料儘可能的隱蔽。

    另外一種是為List新增一個內部類或者巢狀類,然後我們來看這2種類的區別。

    首先我們需要先理解一下2種類的概念:

    將一個類放入另一個類的內部,當這個類是static的,表示巢狀類,否則這個類就是內部類。

    1,巢狀類

    巢狀類是外部類的一部分,所以可以訪問外部類,特性:

    巢狀類訪問外部類:

    不能直接訪問外部類的非靜態成員

    只能直接訪問外部類的靜態成員

    外部類訪問巢狀類:

    外部類可以訪問巢狀類的私有成員 和公有成員

    so this is 程式碼實現:

    複製程式碼

    private static class MyIterator<T>{

    MyList<T> list ;

    int iteratorIndex = 0;

    public MyIterator(MyList<T> myList){

    list = myList;

    }

    public boolean hasNext(){

    return list.length>iteratorIndex;

    }

    public T next(){

    return list.arrays[iteratorIndex++];

    }

    public void remvoe(){

    list.remove(iteratorIndex--);

    }

    }

    複製程式碼

    2,內部類

    當宣告一個內部類時,編譯器會新增對外部類的一個隱式引用,該物件引起內部類物件的構造。

    如果外部類的名字是Outer,則隱式引用就是Outer.this。

    實現:

    複製程式碼

    private class MyIterator<T>{

    int iteratorIndex = 0;

  • 中秋節和大豐收的關聯?
  • 人類要進行星際旅行,必須要具備什麼條件?