枚举界面。默认方法实现

时间:2017-09-08 21:24:08

标签: java enumeration

晚上好,请考虑以下事项:

public class TestEnum implements Enumeration<String> {
private Enumeration<String> files;

private TestEnum(Vector<String> files) {
    this.files = files.elements();
}

public Enumeration<String> getFiles() {
    return files;
}

@Override
public boolean hasMoreElements() {
    return files.hasMoreElements();
}

@Override
public String nextElement() {
    return files.nextElement();
}

public static void main(String[] args) {
    Vector<String> vector = new Vector<>();
    vector.add("1");
    vector.add("2");
    vector.add("3");
    vector.add("4");
    vector.add("5");

    TestEnum obj = new TestEnum(vector);

    while(obj.getFiles().hasMoreElements()) {
        System.out.println(obj.getFiles().nextElement());
    }


}

}

我不明白,当操作whit枚举字符串时,nextElement()和hasMoreElements()方法的默认实现在哪里? 我知道方法实现应该在程序员自己创建并且已经创建,但是在行中:

return files.nextElement();

我在具有另一个实现的“files”对象上调用nextElement()方法吗?如果方法有我的实现,那么应该无限期地调用nextElement()?或者我错了?

1 个答案:

答案 0 :(得分:0)

对不起,伙计们,我找到了它:

public Enumeration<E> elements() {
    return new Enumeration<E>() {
        int count = 0;

        public boolean hasMoreElements() {
            return count < elementCount;
        }

        public E nextElement() {
            synchronized (Vector.this) {
                if (count < elementCount) {
                    return elementData(count++);
                }
            }
            throw new NoSuchElementException("Vector Enumeration");
        }
    };
}

在Vector类