实现了属于枚举接口的hasMoreElements()的具体类是什么?

时间:2014-09-08 03:25:25

标签: java

import java.io.*;
import java.util.Enumeration;
import java.util.Vector;

class FileEnumerator implements Enumeration<InputStream> {

    private Enumeration<String> files;

    public FileEnumerator(Vector<String> files) {
        this.files = files.elements();
    }

    @Override
    public boolean hasMoreElements() {
        return this.files.hasMoreElements(); //  ------- >>>> This Method ??
    }

    @Override
    public InputStream nextElement() {
        try {
            return new FileInputStream(this.files.nextElement().toString());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

public class App {
    public static void main(String args[]) throws IOException {
        Vector<String> files = new Vector<>();
        files.add("file1.txt");
        files.add("file2.txt");
        files.add("file3.txt");
        SequenceInputStream sequenceInputStream = new SequenceInputStream(
                new FileEnumerator(files));
        int c;
        while ((c = sequenceInputStream.read()) != -1) {
            System.out.print((char)c);
        }
        sequenceInputStream.close();
    }
}

我完全糊涂了..我不知道Enumeration接口中的hasMoreElement()方法在哪里被实现以返回true或false ..因为在这个程序中没有包含它#s; s只有具体的类是StringTTokenizer http://docs.oracle.com/javase/8/docs/api/java/util/Enumeration.html

此外,Vector类中没有这样的方法。

我只是不明白......

2 个答案:

答案 0 :(得分:3)

以下是Vector类中的重写方法。

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

您致电files.elements();上面提到的方法是file.elements()方法。

希望这有帮助

答案 1 :(得分:0)

我相信你对此提出疑问,

@Override
public boolean hasMoreElements() {
    return this.files.hasMoreElements(); //  ------- >>>> This Method ??
}

似乎是Decorator pattern Vector#elements()上的Enumeration的示例(这是您正在寻找的具体实现)。