当前位置: 首页 > 面试题库 >

为什么枚举不可迭代?

景震博
2023-03-14
问题内容

在Java 5及更高版本中,您具有foreach循环,该循环可以神奇地实现任何实现的对象Iterable

for (Object o : list) {
  doStuff(o);
}

但是,Enumerable仍然没有实现Iterable,这意味着要迭代一个,Enumeration您必须执行以下操作:

for(; e.hasMoreElements() ;) {
  doStuff(e.nextElement());
}

有谁知道为什么Enumeration仍然不执行Iterable

编辑:
为澄清起见,我不是在谈论枚举的语言概念,而是在Java
API中称为“
枚举 ”
的Java特定类。


问题答案:

枚举没有被修改为支持Iterable,因为它是一个接口,而不是一个具体的类(例如Vector,它被修改为支持Collections接口)。

如果将Enumeration更改为支持Iterable,则会破坏很多人的代码。



 类似资料:
  • 问题内容: 我是一名即将毕业的计算机科学专业的学生,​​在我的整个编码生涯中,我发现很少使用枚举的实例,除了典型的情况(例如代表标准纸牌的面孔)外,还使用了枚举。 您是否知道在日常编码中使用枚举的任何巧妙方法? 为什么枚举如此重要,在什么情况下应该能够确定建立枚举是最佳方法? 问题答案: 这些是主要的论点,以及短的例子。 的情况 从Java 6开始,是一个凌乱类的示例,该类可以从使用中受益匪浅(除

  • 我听到一些人建议在C++中使用枚举类,因为它们的类型安全。 但这到底意味着什么呢?

  • 问题内容: 我想知道为什么在Java语言中a 不能扩展。 我不是在谈论一个延伸的(这不能做,因为Java没有多重继承,而Š隐含延长),但一类的以只添加额外的方法,而不是额外的枚举值。 就像是: 要这样使用: 因此,有人可以对此限制提供理由(或将我指向正确的JLS部分)吗? 问题答案: 我认为 他们这样做 的答案来自以下问题: 在您的示例中,如何实例化MyClass?用户永远不会(通过)显式实例化枚

  • 问题内容: 我正在使用JavaScript将对象序列化为JSON字符串, 我注意到只有可枚举的对象属性才被序列化: [ 笔 ] 我想知道为什么会这样?我已经通过搜索MDN页面中,json2解析器文档。我找不到任何地方记录此行为。 我怀疑这是使用仅通过[[enumerable]]属性的循环(至少在情况下)的结果。可以使用类似的方法同时返回可枚举和不可枚举的属性。不过,这可能会导致序列化(由于反序列化

  • 问题内容: 我有一个实现该接口的类,但是Java的foreach循环需要该接口。是否有一个到适配器在Java的标准库? 问题答案: 您需要一个所谓的“适配器”,以适应不兼容的。Apache commons- collections具有。用法是:

  • 问题内容: 为什么接口不扩展? 该方法可以简单地返回。 是故意的还是对Java设计师的监督? 能够将循环与这样的迭代器一起使用将很方便: 其中返回迭代器。 问题答案: 因为迭代器通常指向集合中的单个实例。Iterable意味着可以从一个对象获得迭代器以遍历其元素-无需迭代单个实例(迭代器代表的是该实例)。