【问题标题】:Object[] cannot not be converted to String[] in jsp在jsp中Object[]不能转换为String[]
【发布时间】:2014-05-08 19:56:02
【问题描述】:
<%
    ArrayList aList=(ArrayList)request.getAttribute("read");
    String[] write =aList.toArray(new String[aList.size()]);
%>

在上面的代码中,我得到了

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

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

【问题讨论】:

  • 你为什么要这么做?你想用列表做不到的String[] 做什么?为什么你还在使用 scriplets 而不是 JSTL?
  • @RohitJain 先生,我想在 jsp 页面中打印 arrayList 值先生,我更新鲜,这是我的任务先生,他们要求我不要使用 JSTL 标签先生
  • 有人要求您使用 scriplets 而不是 JSTL,这很奇怪。顺便说一句,如果您只想显示值,则无需将其转换为String[]
  • @RohitJain 先生,如果我使用 String[],我有问题,我在下面提到并在下面向 JonSkeet 先生解释,请先生帮我解决这个问题。

标签: java string jsp arraylist casting


【解决方案1】:

问题是aList的类型是raw typeArrayList。这意味着所有泛型的痕迹都被删除了——即使是泛型方法toList

虽然修复起来很简单 - 只需使用 ArrayList&lt;?&gt; 代替:

ArrayList<?> aList = (ArrayList<?>)request.getAttribute("read");

原始类型通常令人头疼,实际上只是为了向后兼容而包括在内 - 尽可能避免使用它们。

【讨论】:

  • 如果我使用上述解决方案,我会收到运行时错误“java.util.ArrayList.toArray(ArrayList.java:393) 处的 java.lang.ArrayStoreException”
  • @Selva:这表明您的列表包含非字符串。您实际上希望它包含什么?
  • 先生,是的,先生,它也包含非字符串值,但我想在 jsp 页面中打印所有 arrayList 值。我正在搜索过去 4 小时,先生,帮帮我
【解决方案2】:

首先,由于您只想在ArrayList 中显示值,因此您实际上不需要将其转换为数组。你也可以遍历ArrayList

其次,即使您将其转换为数组,并且列表包含非字符串值,那么您为什么认为可以将其存储在String[] 中?您可以在String[] 中存储Integer 引用吗?不,这就是它抛出ArrayStoreException 的原因。您应该只使用Object[]。但正如我所说,你不需要它。只需遍历列表。和其他答案一样,不要使用原始类型。

<%
    ArrayList<?> list = (ArrayList<?>) request.getAttribute("read");

    for (Object value: list) {
        out.println(value);
    }
%>

但是,那是糟糕的代码。您不应该再在 JSP 中使用 scriplet。我不知道谁建议您使用它而不是 JSTL。使用 JSTL,您可以使用 &lt;c:forEach&gt; 标签来迭代和打印值:

<c:forEach items = "${read}" var = "value">
    <c:out value="${value}" />
</c:forEach>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2013-04-24
    • 2013-06-16
    • 2013-05-24
    • 2014-01-29
    相关资源
    最近更新 更多