Как правильно распечатать элементы перечислителя? - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь понять Java-программу, написанную кем-то другим, и я не знаю Java. Я написал короткий метод для сброса атрибутов объекта запроса.

public void dumpRequest(HttpServletRequest request) {

    String[] attrNames = new String[100]; // hard coded
    int ani = 0;

    Enumeration rns = request.getAttributeNames();
    while (rns.hasMoreElements()) {
        out.println("attribute name: " + rns.nextElement());
        attrNames[ani] = rns.nextElement().toString();
        ani = ani + 1;
    }

    out.println("" + ani + " atributes");
    String cn;
    for (int n = 0; n < ani; n++) {
        cn = attrNames[n];
        out.println("** " + cn + " - " + request.getAttribute(cn));
    }
    out.println("++++++++++++++++++++++");

}

К моему ужасу, я понял, что на вкладке переменных NetBeans отображается вдвое больше атрибутов объекта запроса по сравнению с выводом моего кода. Перечисление, кажется, задокументировано здесь: https://tomcat.apache.org/tomcat-4.1-doc/catalina/docs/api/org/apache/catalina/util/Enumerator.html

Что я делаю не так?

1 Ответ

0 голосов
/ 06 сентября 2018

Вы вызываете метод nextElement дважды в этом блоке:

while (rns.hasMoreElements()) {
        out.println("attribute name: " + rns.nextElement());
        attrNames[ani] = rns.nextElement().toString();
        ani = ani + 1;
    }

Вы должны вызвать nextElement один раз. Поместите его в переменную и затем используйте эту переменную.

...