首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我不能使用foreach on Java枚举?

为什么我不能使用foreach on Java枚举?
EN

Stack Overflow用户
提问于 2009-08-06 16:34:42
回答 7查看 66.4K关注 0票数 74

为什么我不能这样做:

代码语言:javascript
复制
Enumeration e = ...
for (Object o : e)
  ...
EN

回答 7

Stack Overflow用户

发布于 2014-03-02 23:33:52

使用Collections实用程序类,可以迭代枚举,如下所示:

代码语言:javascript
复制
Enumeration headerValues=request.getHeaders("mycustomheader");
List headerValuesList=Collections.list(headerValues);

for(Object headerValueObj:headerValuesList){
 ... do whatever you want to do with headerValueObj
}
票数 48
EN

Stack Overflow用户

发布于 2013-07-31 10:31:49

我已经用两个非常简单的类解决了这个问题,一个用于Enumeration,另一个用于Iterator。枚举封装器如下:

代码语言:javascript
复制
static class IterableEnumeration<T>
extends Object
implements Iterable<T>, Iterator<T>
{
private final Enumeration<T>        enumeration;
private boolean                     used=false;

IterableEnumeration(final Enumeration<T> enm) {
    enumeration=enm;
    }

public Iterator<T> iterator() {
    if(used) { throw new IllegalStateException("Cannot use iterator from asIterable wrapper more than once"); }
    used=true;
    return this;
    }

public boolean hasNext() { return enumeration.hasMoreElements(); }
public T       next()    { return enumeration.nextElement();     }
public void    remove()  { throw new UnsupportedOperationException("Cannot remove elements from AsIterator wrapper around Enumeration"); }
}

它可以与静态实用程序方法一起使用(这是我的首选):

代码语言:javascript
复制
/**
 * Convert an `Enumeration<T>` to an `Iterable<T>` for a once-off use in an enhanced for loop.
 */
static public <T> Iterable<T> asIterable(final Enumeration<T> enm) {
    return new IterableEnumeration<T>(enm);
    }

...

for(String val: Util.asIterable(enm)) {
    ...
    }

或者通过实例化该类:

代码语言:javascript
复制
for(String val: new IterableEnumeration<String>(enm)) {
    ...
    }
票数 8
EN

Stack Overflow用户

发布于 2009-08-06 16:39:04

新风格的for-loop ("foreach")适用于数组和实现Iterable接口的东西。

它也更类似于Iterator,而不是Iterable,所以对于Enumeration来说,使用foreach是没有意义的,除非Iterator也这样做了(但它并没有)。支持Iterator的人也不鼓励使用Enumeration

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1240077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档