【发布时间】:2014-02-05 22:24:53
【问题描述】:
实际上,这看起来很简单,但我对此感到非常困惑。 Java 的枚举 hasMoreElements() 和 nextElement() 方法是相关的,但工作方式当然不同于 C# 的 IEnumerator MoveNext() 和 Current() 属性。但是我该如何翻译这样的东西呢?:
//class declaration, fields constructors, unrelated code etc.
private Vector atomlist = new Vector();
public int getNumberBasis() {
Enumeration basis = this.getBasisEnumeration();
int numberBasis = 0;
while (basis.hasMoreElements()) {
Object temp = basis.nextElement();
numberBasis++;
}
return numberBasis;
}
public Enumeration getBasisEnumeration() {
return new BasisEnumeration(this);
}
private class BasisEnumeration implements Enumeration {
Enumeration atoms;
Enumeration basis;
public BasisEnumeration(Molecule molecule) {
atoms = molecule.getAtomEnumeration();
basis = ((Atom) atoms.nextElement()).getBasisEnumeration();
}
public boolean hasMoreElements() {
return (atoms.hasMoreElements() || basis.hasMoreElements());
}
public Object nextElement() {
if (basis.hasMoreElements())
return basis.nextElement();
else {
basis = ((Atom) atoms.nextElement()).getBasisEnumeration();
return basis.nextElement();
}
}
}
如您所见,枚举类的方法已重载,我认为在任何地方用 MoveNext 和 Current 替换 hasMoreElements 和 nextElement 都行不通……因为 basic.nextElement() 在 if- 中再次调用 hasMoreElements()否则声明。如果我用 MoveNext() 替换 hasMoreElements,代码将前进两次而不是一次。
【问题讨论】:
标签: c# java translation enumeration ienumerator