Что такое конкретный класс, который реализовал hasMoreElements (), который принадлежит интерфейсу перечисления?

1
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();
    }
}

Я совершенно смущен. Я не знаю, где был применен метод hasMoreElement() в интерфейсе Enumeration для возврата true или false.. так как в этой программе он не включал в него только конкретный класс, который является StringTTokenizer http://docs.oracle.com/JavaSE/8/документы/API/Java/Util/Enumeration.html

Также нет такого метода в классе Vector.

Я просто не понимаю...

  • 1
    Если вы внимательно посмотрите, экземпляр конкретной реализации Enumeration будет найден в строке: this.files = files.elements(); element () метод Vector возвращает Enumeration, который имеет метод hasMoreElements.
  • 1
    Там нет ни одного. Существует один класс для каждой коллекции, который вы можете перечислить.
Показать ещё 1 комментарий
Теги:

2 ответа

3
Лучший ответ

Вот переопределенный метод в классе Vector.

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

Вы вызвали files.elements(); Метод, о котором я упоминал выше, находится в этом file.elements().

Надеюсь это поможет

  • 0
    Спасибо, сэр .. Да, это был недостающий кусок ...
  • 0
    Не за что. Примите мой ответ и проголосуйте .. Спасибо.
0

Я считаю, что вы спрашиваете об этом,

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

Похоже, пример шаблона Decorator для Vector#elements() Enumeration (и это конкретная реализация, которую вы ищете).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню