Java 将枚举转换为迭代器

Java 将枚举转换为迭代器,java,iterator,nullpointerexception,enumeration,Java,Iterator,Nullpointerexception,Enumeration,我在工作表中遇到了一个问题,即创建一个适配器来将枚举转换为迭代器。当我尝试运行以下代码时,我得到一个空指针异常 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) {

我在工作表中遇到了一个问题,即创建一个适配器来将枚举转换为迭代器。当我尝试运行以下代码时,我得到一个空指针异常

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();
    }

}

另一点需要注意的是,在我首先创建了int之后,我无法从枚举中打印出int。

构造函数中的赋值错误。它需要
this.enmuation=enmuation
enmuation
是构造函数参数,而
this.enmuation
是对象属性。

公共类枚举{
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();
        }
    }
公共静态void main(字符串[]args){ //int[]ourArray={0,1,2,3,4,5,6,7,8,9}; 向量=新向量(Arrays.asList(0,1,2,3,4,5,6,7,8,9)); //获取枚举器 枚举数=vector.elements(); EnumerationToInterator enumToIt=新的EnumerationToInterator(枚举器); while(enumToIt.hasNext()){ System.out.println(enumToIt.next()); } } } //将枚举转换为迭代器! 类EnumerationToIterator实现迭代器{ //我们的列举 计数加密; //建造师 公共枚举到迭代器(枚举操作){ 这个。enmuation=enmuation; } //我们的方法 公共布尔hasNext(){ 返回enmuation.hasMoreElements(); } 公共交通工具{ 返回enmuation.nextElement(); } 公共空间删除(){ 抛出新的UnsupportedOperationException(); } }
Java 5及更高版本 不需要重新发明轮子。只需使用
Collections.list(枚举e)
,它返回一个
ArrayList
。然后使用
ArrayList.iterator()
获取
迭代器

Java9及更高版本 现在要直接转换为迭代器的枚举:

enumeration.asIterator();

Java9提供了一个新的默认方法:
Iterator asiiterator()

啊,学童错误,谢谢!!快速提问,消除了错误,但当我尝试打印原始值时,它只打印一个内存地址(我想),例如“[I@38f0b51d“。尝试转换为int时会出现以下错误:“
System.out.println();
?System.out.println(enumToIt.next())中的内容无法转换为java.lang.Integer”;给出垃圾,System.out.println((int)enumToIt.next())给出error@jlordo:仅供参考,您的编辑被拒绝,因为它更改了原始帖子的代码。而不是编辑原始帖子(buggy)代码,您应该编辑您的答案以包含适当修改的代码。是的,我理解其动机。不幸的是,编辑原始代码以修复bug也可能使问题本身无效。因此,建议的方法是将相关部分复制并修改到您自己的帖子中。HTH,谢谢您的回答!添加泛型类型在您的主类帮助中?请参阅我的更新答案。仍然没有运气,行“Vector Vector=new Vector(Arrays.asList(ourArray));”给出错误,“构造函数向量(List)未定义”一个适配器是一个更好的选择,因为元素的数量可能是巨大的,一个<代码> ARAYLISTA/COD>所有元素都会增加内存消耗。@ CythulLangRIM仅仅因为有更好的情况,所以它不会更好。这个答案对于大多数用途来说是非常好的。接受答案?它的得票数是接受答案的近10倍,而这个问题是
java enumeration to iterator
的顶级搜索结果之一,因此让主要答案更能概括大多数开发人员的需求可能会更好。原始问题的重点是我自己如何做另一个答案有更多的赞成票,但它没有解决我所问的问题。