<%
ArrayList aList=(ArrayList)request.getAttribute("read");
String[] write =aList.toArray(new String[aList.size()]);
%>
在上面的代码中,我正在
不兼容的类型:无法将Object []转换为String []。
如果我只投了我会得到我想要的答案,我google并得到了很多解决方案,但没有给我一个解决方案,帮我找出这个问题。提前感谢您的回复。
答案 0 :(得分:5)
问题是aList
的类型是raw type ArrayList
。这意味着从中删除了所有泛型的痕迹 - 即使是通用方法toList
。
虽然修复起来很简单 - 只需使用ArrayList<?>
代替:
ArrayList<?> aList = (ArrayList<?>)request.getAttribute("read");
原始类型通常是颈部疼痛,实际上只是为了向后兼容而包括在内 - 尽量避免使用它们。
答案 1 :(得分:1)
首先,由于您只想在ArrayList
中显示值,因此您不需要将其转换为数组。您也可以遍历ArrayList
。
其次,即使您将其转换为数组,并且列表包含非字符串值,那么为什么您认为可以将其存储在String[]
中?您可以在Integer
中存储String[]
引用吗?不,这就是投掷ArrayStoreException
的原因。您应该只使用Object[]
。但正如我所说,你不需要它。只是迭代列表。和其他答案一样,不要使用原始类型。
<%
ArrayList<?> list = (ArrayList<?>) request.getAttribute("read");
for (Object value: list) {
out.println(value);
}
%>
但是,这是糟糕的代码。你不应该再在JSP中使用scriplets了。我不知道是谁建议你使用它而不是JSTL。使用JSTL,您可以使用<c:forEach>
标记来迭代和打印值:
<c:forEach items = "${read}" var = "value">
<c:out value="${value}" />
</c:forEach>