11

列挙型をイテレータに変換するアダプタを作成するワークシートに問題があります。次のコードを実行しようとすると、nullポインタ例外が発生します。

import java.util.Vector;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Iterator;

public class ConvertEnumeration {

    public static void main(String [] args) {

        int [] ourArray = {0,1,2,3,4,5,6,7,8,9};
        Vector vector = new Vector(Arrays.asList(ourArray));

        //Get Enumerator 
        Enumeration enumerator = vector.elements();

        EnumerationToIterator enumToIt = new EnumerationToIterator(enumerator);
        while(enumToIt.hasNext()) {
            System.out.println(enumToIt.next());
        }
    }

}


//Convert our enumeration to Iterator!
class EnumerationToIterator implements Iterator {

    //Our enumeration
    Enumeration enmueration;

    //Constructor
    public EnumerationToIterator(Enumeration enmueration){
        enmueration = this.enmueration;
    }

    //Our Methods
    public boolean hasNext(){
        return enmueration.hasMoreElements();
    }

    public Object next(){
        return enmueration.nextElement();
    }

    public void remove(){
        throw new UnsupportedOperationException();
    }

}

もう1つの注意点は、最初にintを作成した後、列挙からintを出力できないことです。

4

4 に答える 4

49

Java5以降

車輪の再発明をする必要はありません。を使用するだけCollections.list(Enumeration<T> e)で、が返されますArrayList<T>。次に、を使用ArrayList.iterator()してを取得しIteratorます。

Java9以降

列挙には、イテレータに直接変換するメソッドがあります。

enumeration.asIterator();
于 2013-12-20T05:34:00.780 に答える
8

Java 9は、新しいデフォルトのメソッドを提供します。Iterator<E> asIterator()

于 2017-02-24T17:42:35.280 に答える
7

コンストラクターの割り当てが間違っています。this.enmueration = enmueration;
enmuerationコンストラクター引数である必要がthis.enmuerationあり、オブジェクト属性です。

于 2012-10-25T16:30:22.137 に答える
4
public class ConvertEnumeration {

    public static void main(String [] args) {

        // int [] ourArray = {0,1,2,3,4,5,6,7,8,9};
        Vector<Integer> vector = new Vector<Integer>(Arrays.asList(0,1,2,3,4,5,6,7,8,9));

        //Get Enumerator 
        Enumeration<Integer> enumerator = vector.elements();

        EnumerationToIterator<Integer> enumToIt = new EnumerationToIterator<Integer>(enumerator);
        while(enumToIt.hasNext()) {
            System.out.println(enumToIt.next());
        }
    }

}    

//Convert our enumeration to Iterator!
    class EnumerationToIterator<T> implements Iterator<T> {

        //Our enumeration
        Enumeration<T> enmueration;

        //Constructor
        public EnumerationToIterator(Enumeration<T> enmueration){
            this.enmueration = enmueration;
        }

        //Our Methods
        public boolean hasNext(){
            return enmueration.hasMoreElements();
        }

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

        public void remove(){
            throw new UnsupportedOperationException();
        }
    }
于 2012-10-25T22:20:17.347 に答える