SCd*_*CdF 65 java enumeration iterable
在Java 5及更高版本中,你有foreach循环,它可以在任何实现的东西上神奇地工作Iterable:
for (Object o : list) {
doStuff(o);
}
Run Code Online (Sandbox Code Playgroud)
但是,Enumerable仍然没有实现Iterable,这意味着迭代Enumeration你必须执行以下操作:
for(; e.hasMoreElements() ;) {
doStuff(e.nextElement());
}
Run Code Online (Sandbox Code Playgroud)
有谁知道有没有理由Enumeration仍然没有实现Iterable?
Tom*_*ine 80
作为使用增强型for循环的Enumeration 的简单而干净的方法,使用java.util.Collections.list转换为ArrayList.
for (TableColumn col : Collections.list(columnModel.getColumns()) {
Run Code Online (Sandbox Code Playgroud)
(javax.swing.table.TableColumnModel.getColumns返回Enumeration.)
请注意,这可能会略微降低效率.
eri*_*son 45
它没有意义的Enumeration实现Iterable.Iterable是一种工厂方法Iterator.Enumeration类似于Iterator,并且仅维持单个枚举的状态.
因此,小心尝试包装Enumeration一个Iterable.如果有人通过了我Iterable,我将假设我可以iterator()反复调用它,创建Iterator我想要的任意数量的实例,并在每个实例上独立迭代.包装Enumeration不符合本合同; 不要让你的包装Enumeration逃脱你自己的代码.(DirectoryStream顺便说一句,我注意到Java 7 以这种方式违反了期望,也不应该被允许"逃避".)
Enumeration就像一个Iterator,而不是一个Iterable.A Collection是Iterable.一个Iterator不是.
你不能这样做:
Vector<X> list = …
Iterator<X> i = list.iterator();
for (X x : i) {
x.doStuff();
}
Run Code Online (Sandbox Code Playgroud)
所以这样做没有意义:
Vector<X> list = …
Enumeration<X> i = list.enumeration();
for (X x : i) {
x.doStuff();
}
Run Code Online (Sandbox Code Playgroud)
没有Enumerable相当于Iterable.可以在不破坏任何东西的情况下添加它来进行循环,但重点是什么?如果您能够实现这个新Enumerable界面,为什么不实施Iterable呢?
Blo*_*ard 39
枚举尚未被修改为支持Iterable,因为它是一个接口而不是具体的类(如Vector,它被修改为支持Collections接口).
如果将Enumeration更改为支持Iterable,它将破坏一堆人的代码.
| 归档时间: |
|
| 查看次数: |
19836 次 |
| 最近记录: |