Что вам нужно, это актерский состав. Защитное решение проверяет, что тип является правильным перед кастом:
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