为什么我不能在 Java 枚举上使用 foreach?

2022-08-31 13:28:20

为什么我不能做:

Enumeration e = ...
for (Object o : e)
  ...

答案 1

因为 Enumeration<T> 不会扩展 Iterable<T>。下面是创建可迭代枚举的示例

至于为什么这是一个有趣的问题。这并不完全是你的问题,但它揭示了一些问题。来自 Java Collections API Design FAQ

为什么迭代器不扩展枚举?

我们认为枚举的方法名称是不幸的。它们很长,而且经常使用。鉴于我们正在添加一个方法并创建一个全新的框架,我们认为不利用这个机会来改进名称是愚蠢的。当然,我们可以在迭代器中支持新旧名称,但这似乎不值得。

这基本上向我表明,Sun希望与枚举保持距离,枚举是非常早期的Java,具有相当详细的语法。


答案 2

使用集合实用程序类,枚举可以像这样可迭代:

Enumeration headerValues=request.getHeaders("mycustomheader");
List headerValuesList=Collections.list(headerValues);

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

推荐