3

「Head First」シリーズのデザインパターンを学んでいます。この本は少し古くなっています (ジェネリック型はありません) ので、一部を書き直そうとしています。メソッドのように動作するようにWrapperを記述し、 ArrayList でテストすることになっています。IteratorEnumerator

「元の」バージョンは次のように見えました(下)。<E>またはなどの汎用クラスにしようとしましたが、うまくいきませ<T<E>>んでした。だけでなく、あらゆる種類のイテレータで機能することも確認したいと思いArrayListますArrayList<T>。これを実装する適切な方法は何ですか?

public class IteratorWrapper implements Enumeration {
    Iterator iterator;

    public IteratorWrapper(Iterator iterator){
        this.iterator = iterator;
    }

    public boolean hasMoreElements(){
        return iterator.hasNext();
    }

    //Return generic Type T 
    public Object nextElement(){
        return iterator.next();
    }
}

テストクラス

public class WrapperTest {
    public static void main(String[] args){
        ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("element1");
        arrayList.add("element2");

        //This part will be rewritten when wrapper will work  
        IteratorWrapper iteratorWrapper = new IteratorWrapper(arrayList.iterator());

        while(iteratorWrapper.hasMoreElements()){
            System.out.println(iteratorWrapper.nextElement());
        }
    }
}
4

1 に答える 1

3

次のようなジェネリック パラメータを追加できます。

public class IteratorWrapper<T> implements Enumeration<T> {
    Iterator<T> iterator;

    public IteratorWrapper(Iterator<T> iterator){
        this.iterator = iterator;
    }

    public boolean hasMoreElements(){
        return iterator.hasNext();
    }

    public T nextElement(){
        return iterator.next();
    }
}

次に、初期化は次のようになります。

IteratorWrapper<String> iteratorWrapper = new IteratorWrapper<String>(arrayList.iterator());
于 2013-06-12T17:12:57.673 に答える