如何获取数据并遍历作为对象返回的arraylist?

时间:2019-01-08 12:57:23

标签: java object arraylist iteration

在我的应用程序中,我在某些servlet中创建了一个ArrayList,该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 :(得分:0)

您需要的是演员表。防御解决方案在强制转换之前检查类型是否正确:

    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
    }

这有点简单。

链接: Object Type Casting in Java

答案 1 :(得分:-2)

您可以将对象传递给ArrayList构造函数:

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