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