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类中没有这样的方法。
我只是不明白......
答案 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
的示例(这是您正在寻找的具体实现)。