美文网首页
Set.clear()报UnsupportedOperation

Set.clear()报UnsupportedOperation

作者: 燃灯道童 | 来源:发表于2022-12-16 11:17 被阅读0次

问题场景
有个业务场景,一个类别对应多个内容,一起提交。增删改查都是一对多,测试起来也没有问题。
但是在执行unit test的时候出现UnsupportedOperationException。

报错图片.png

业务逻辑
A entity中有个属性是Set<Bentity>, 更新时先把数据库中查询的Set置空,然后再添加到前端传过来的数据。

解决方法
写unit test的时候把所有创建entity的地方抽成了一个类,在生成用到的这个entity的时候,当时写了Set.of()导致的,我新创建Set并重新塞值后就可以了。
Set.of的代码:

    public static PostgreSQLGiftSetTagEntity createPostgreSQLGiftSetTag(){
        PostgreSQLGiftSetTagEntity postgreSQLGiftSetTagEntity = new PostgreSQLGiftSetTagEntity();
        BeanUtils.copyProperties(createGiftSetTagDTO(),postgreSQLGiftSetTagEntity);
        postgreSQLGiftSetTagEntity.setGiftSetList(Set.of(createPostgreSQLGiftSet()));
        return postgreSQLGiftSetTagEntity;
    }

调整后的代码:

    public static PostgreSQLGiftSetTagEntity createPostgreSQLGiftSetTag(){
        PostgreSQLGiftSetTagEntity postgreSQLGiftSetTagEntity = new PostgreSQLGiftSetTagEntity();
        BeanUtils.copyProperties(createGiftSetTagDTO(),postgreSQLGiftSetTagEntity);
        Set<PostgreSQLGiftSetEntity> postgreSQLGiftSet = new HashSet<>();
        postgreSQLGiftSet.add(createPostgreSQLGiftSet());
        postgreSQLGiftSetTagEntity.setGiftSetList(postgreSQLGiftSet);
        return postgreSQLGiftSetTagEntity;
    }

原因
报错信息指向的是ImmutableCollections类,这是不可变集合,不可做改变,用add、clear等方法,编辑器虽然不会报错,但是运行的时候报UnsupportedOperationException。

ImmutableCollections是一种不可变类型,一旦创建就不能改变。
常见创建不可变集合方式就是List.of("1","2"))或Arrays.asList("1","2"),对其进行值更改的时候就会报UnsupportedOperationException,创建可以变化的集合即可,如上调整后的代码。

参考链接:
什么是不可变集合:https://www.h3399.cn/201801/532185.html
不可变集合的定义与发展:https://mdnice.com/writing/b62b8d6cd6124264ac39f72e4474d208

相关文章

  • java.lang.UnsupportedOperationEx

    在java中,对list进行操作的时候,有时候会报错:java.lang.UnsupportedOperation...

  • 怎样才会越来越有福报

    所谓“依报由正报转”,有怎样的正报就有怎样的依报;有怎样的依报,可见他是怎样的正报。 依报就是所处的环境,我们是出...

  • 冰柱凝固在屋檐上很久了。 也不知从哪日起,西北风开始刮起,雪纷纷扬扬落起,旋转,飘零,逐渐堆积在屋檐上。又或许是太...

  • 你相信世间真的存在因果吗? 1、 老王阿姨有位非常优秀的儿子,叫小志。小志学业优异,那年高考考了全县第一,老师们极...

  • 似乎做的每一件事情都会在某一天以某种你防不胜防的形式回报或者惩罚你。

  • 现世报!不爽丝毫。心念所动,报应粘随。人性的魔障,压不住就会跳出来。临界点在哪里呢?佛啊,请在野兽跑出来之前统统超...

  • ·报·

    有时候信手拿笔在纸上乱涂 什么也不想 它就在笔下出现了

  • 善有善报,恶有恶报,不是不报,时候不到。我们都是凡夫俗子,该吃吃,该喝喝。人世间的精灵, 也有生命,春天来了,草长...

  • 有很多是表象的 很是奇怪

网友评论

      本文标题:Set.clear()报UnsupportedOperation

      本文链接:https://www.haomeiwen.com/subject/jxrrqdtx.html