无法在jsp中将Object []转换为String []

时间:2014-03-29 07:33:59

标签: java string jsp arraylist casting

<%
    ArrayList aList=(ArrayList)request.getAttribute("read");
    String[] write =aList.toArray(new String[aList.size()]);
%>

在上面的代码中,我正在

  

不兼容的类型:无法将Object []转换为String []。

如果我只投了我会得到我想要的答案,我google并得到了很多解决方案,但没有给我一个解决方案,帮我找出这个问题。提前感谢您的回复。

2 个答案:

答案 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>