繁体   English   中英

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

[英]How to obtain data and iterate over arraylist returned as an object?

在我的应用程序中,我在使用 request.setAttribute() 作为“testList”分配的某个 servlet 中创建了一个 ArrayList。 然后请求被转发到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 的强制转换)? 还是泛型? 或者... ?

你需要的是一个演员。 防御解决方案在转换之前检查类型是否正确:

    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和其他集合类型。 如果您只希望它与ListArrayList使用,只需在代码中使用这些类型之一而不是Collection

如果运行时类型不符合预期,请考虑向if语句添加else部分并发出日志消息并执行一些其他适当的操作。

如果你确定你总是得到一个ArrayList<TestObject> ,你可以省略检查:

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

这个稍微简单一些。

链接: Java 中的对象类型转换

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM