iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java.lang.ArrayStoreException异常怎么解决
  • 402
分享到

java.lang.ArrayStoreException异常怎么解决

2023-06-22 07:06:55 402人浏览 八月长安
摘要

本篇内容主要讲解“java.lang.ArrayStoreException异常怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java.lang.ArrayStoreException异

本篇内容主要讲解“java.lang.ArrayStoreException异常怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java.lang.ArrayStoreException异常怎么解决”吧!

java.lang.ArrayStoreException异常

异常提示

java.lang.ArrayStoreException: java.lang.Boolean
at java.util.stream.nodes$FixedNodeBuilder.accept(Nodes.java:1222)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:545)
at java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
at java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:438)
at

查询百度的解释:试图将错误类型的对象存储到一个对象数组时抛出的异常。之后,在看看自己错误的代码:

Field[] filterCopyFields = Stream.of(appendFields)     .map(f -> !preFieldNames.contains(f.getName())).toArray(Field[]::new);

很容易看出问题的所在,这里我是想过滤Field[]数组中的元素,!preFieldNames.contains(f.getName())这个是过滤条件,发现了这里使用的居然是map,过滤应该是使用filter,map中的元素应该是返回结果并在toArray方法中转换成数组,这里map中返回的是Boolean布尔类型的数据,也就是说不能将boolean类型的对象存储到Field对象数组中。

这里可以看一下jdk8源码中对toArray(IntFunction<A[]> generator)方法的定义:

    <A> A[] toArray(IntFunction<A[]> generator);

可以看到toArray()的参数是IntFunction<A[]>类型,从@param A the element type of the resulting array这个注解中可以看到,A是表示返回数组的元素类型,在我的例子中返回类型是一个Field,而如果Stream中使用了map遍历,返回的类型又是Boolean,类型不匹配而出现错误。

解决更改

Field[] filterCopyFields = Stream.of(appendFields)     .filter(f -> !preFieldNames.contains(f.getName())).toArray(Field[]::new);

其实这种小问题应该很容易避免,在出现ArrayStoreException异常时应该对应着数组中的元素类型去查找错误,构造数组时应按照正确的类型来构造。

Java工具类List的toArray方法及java.lang.ArrayStoreException

1.List接口中有两个方法

Object[] toArray(); T[] toArray(T[] a);

分析:不带参数的方法默认是把数组转换为Object类型,而带参数的方法会将数组转换为指定的类型;

指定目标数组数据类型:

List<Integer> list = new ArrayList<Integer>();        list.add(12);        list.add(13);        list.toArray(new Integer[list.size()]);

不指定目标数组数据类型获得的数组类型是Object类型:

List<Integer> list = new ArrayList<Integer>();        list.add(12);        list.add(13);        list.toArray();

2.使用toArray方法是出现java.lang.ArrayStoreException异常

public class StingUtilsTest{    public static void main(String[] args) {        List<Integer> list = new ArrayList<Integer>();        list.add(12);        list.add(13);        list.toArray(new Long[list.size()]);    }}

Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.ArrayList.toArray(ArrayList.java:390)
at common.lang.StingUtilsTest.main(StingUtilsTest.java:23)

分析:出现这种异常是由于数组中存入的数据与要转换的目标数组的类型不一致导致的;还有一点需要注意的是toArray参数数组的初始化大小如果list.size大于等于list的列表的长度那么就默认使用当前的参数数组,如果小于list的长度就会重新创建一个数组,建议如果知道list的长度一定要初始化数组的长度,这样可以节省内存空间,提高效率;

到此,相信大家对“java.lang.ArrayStoreException异常怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: java.lang.ArrayStoreException异常怎么解决

本文链接: https://www.lsjlt.com/news/303150.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作