为什么我不能在 Java 枚举上使用 foreach?
为什么我不能做:
Enumeration e = ...
for (Object o : e)
...
为什么我不能做:
Enumeration e = ...
for (Object o : e)
...
因为 Enumeration<T>
不会扩展 Iterable<T>
。下面是创建可迭代枚举的示例。
至于为什么这是一个有趣的问题。这并不完全是你的问题,但它揭示了一些问题。来自 Java Collections API Design FAQ:
为什么迭代器不扩展枚举?
我们认为枚举的方法名称是不幸的。它们很长,而且经常使用。鉴于我们正在添加一个方法并创建一个全新的框架,我们认为不利用这个机会来改进名称是愚蠢的。当然,我们可以在迭代器中支持新旧名称,但这似乎不值得。
这基本上向我表明,Sun希望与枚举保持距离,枚举是非常早期的Java,具有相当详细的语法。
使用集合实用程序类,枚举可以像这样可迭代:
Enumeration headerValues=request.getHeaders("mycustomheader");
List headerValuesList=Collections.list(headerValues);
for(Object headerValueObj:headerValuesList){
... do whatever you want to do with headerValueObj
}