Как получить данные и перебрать массив, возвращенный как объект? - PullRequest
0 голосов
/ 08 января 2019

В моем приложении я создал ArrayList в каком-то сервлете, который был назначен с помощью request.setAttribute () как «testList». Затем запрос был отправлен на страницу JSP. На странице jsp я хочу получить весь ArrayList и перебрать его.

Я использовал getAttribute (), но после этого я не могу получить ArrayList из этого объекта.

ArrayList содержит объекты TestObject, созданные мной в другом классе (который был импортирован правильно). Я хотел бы получить доступ к нему путем итерации по ArrayList.

Object testList = request.getAttribute("testList");
ArrayList<TestObject> localList = new ArrayList<TestObject>();
localList = testList;
//Type mismatch: cannot convert from Object to ArrayList<TestObject>

Как лучше всего получать данные из Object в ArrayList?

Должен ли я использовать приведение (IDE предупреждает: Безопасность типов: непроверенное приведение из Object в ArrayList)? Или дженерики? Или ...?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Что вам нужно, это актерский состав. Защитное решение проверяет, что тип является правильным перед кастом:

    Object testList = request.getAttribute("testList");
    if (testList instanceof Collection) {
        for (Object obj : (Collection<?>) testList) {
            if (obj instanceof TestObject) {
                TestObject currentTestObject = (TestObject) obj;
                // Do something with currentTestObject
            }
        }
    }

Чтобы перебрать список, возвращенный из request.getAttribute, нужно только предположить, что это Collection, а не обязательно ArrayList. Поскольку ArrayList реализует интерфейс Collection, приведенный выше код будет работать с ArrayList и с другими типами коллекций. Если вы хотите, чтобы он работал только с List или только ArrayList, просто используйте один из этих типов вместо Collection в коде.

Рассмотрите возможность добавления else частей к операторам if, выдайте сообщение журнала и выполните некоторые другие соответствующие действия, если тип среды выполнения не соответствует ожидаемому.

Если вы уверены, что всегда получаете ArrayList<TestObject>, вы можете опустить чеки:

    Collection<TestObject> testList = (Collection<TestObject>) request.getAttribute("testList");
    for (TestObject currentTestObject : testList) {
        // Do something with currentTestObject
    }

Это несколько проще.

Ссылка: Приведение типов объектов в Java

0 голосов
/ 08 января 2019

Вы можете передать свой объект в конструктор ArrayList:

Object testList = request.getAttribute("testList");
ArrayList<TestObject> localList = new ArrayList<TestObject>(testList);
...