`
thisjava
  • 浏览: 13323 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

immutable reference & collections

阅读更多

最近遭遇collection reference错误使用的bug,原始代码:

List<CallbackRequestModel> callbackModels = new ArrayList<CallbackRequestModel>(datas.size());

for (TaskData<BatchUserData> taskData : datas) {
CallbackRequestModel request = new CallbackRequestModel();
BatchUserData user = taskData.getData();
request.setData(user.getUserId());

//先解析任务配置时的扩展数据
Map<String, Object> configExtra=dispatch.getSubTask().getTaskConfig().getOutBizMarkMap();
if (configExtra==null){
configExtra=new HashMap<String,Object>();//原始任务数据被替换、当前临时数据写入任务配置中、被其他线程使用
}

//再解析任务数据的扩展信息
Map<String, Object> dataExtra = JSONUtil.parseToMap(taskData.getExtraData());
//任务数据扩展信息不为空时,合并两份扩展
if (!CollectionUtils.isEmpty(dataExtra)) {
configExtra.putAll(dataExtra);
}

request.setExtraData(configExtra);
callbackModels.add(request);
}

修改后:
List<CallbackRequestModel> callbackModels = new ArrayList<CallbackRequestModel>(datas.size());

for (TaskData<BatchUserData> taskData : datas) {
CallbackRequestModel request = new CallbackRequestModel();
BatchUserData user = taskData.getData();
request.setData(user.getUserId());
//单独新增扩展数据map,拷贝元素任务扩展数据
Map<String, Object> configExtra = new HashMap<String, Object>();

//先解析任务配置时的扩展数据
Map<String, Object> outBizMarkMap=dispatch.getSubTask().getTaskConfig().getOutBizMarkMap();
if (!CollectionUtils.isEmpty(outBizMarkMap)){
configExtra.putAll(outBizMarkMap);
}

//再解析任务数据的扩展信息
Map<String, Object> dataExtra = JSONUtil.parseToMap(taskData.getExtraData());
//任务数据扩展信息不为空时,合并两份扩展
if (!CollectionUtils.isEmpty(dataExtra)) {
configExtra.putAll(dataExtra);
}

request.setExtraData(configExtra);
callbackModels.add(request);
}

java collection reference immutable引用不可修改:

List<String> names = new ArrayList<String>();
names.add(“helo”);
names.add(“google”);
final List<String> list = names;
list.add(“baidu”);//集合可修改
list = new ArrayList<String>();//引用不可修改
java collection immutable引用所指对象不可修改:

List<String> names = new ArrayList<String>();
names.add(“helo”);
names.add(“google”);
List<String> copyList = Collections.unmodifiableList(names);
copyList.add(“world”); 集合不可修改

copyList=new ArrayList<String>();//引用可修改

分享到:
评论

相关推荐

    kotlinx.collections.immutable,Kotlin的不可变集合原型.zip

    在Kotlin编程语言中,`kotlinx.collections.immutable`是一个重要的库,它提供了不可变集合的实现。不可变集合是一旦创建后就不能修改的集合,这种数据结构在多线程环境、函数式编程和构建安全的数据模型时非常有用...

    Android代码-kotlinx.collections.immutable

    Immutable Collections Library for Kotlin Immutable collection interfaces and implementation prototypes for Kotlin. For further details see the proposal. Prototype implementation is based on ...

    json_serializable_immutable_collections:使用json_serializable序列化更多集合

    json_serializable_immutable_collections 该存储库包含旨在扩展到json_serializable功能的软件包,尤其是为了支持更多的收集/容器类型。 参见 。 该软件包增加了对Built_value和kt.dart集合的支持 该软件包增加了对...

    kotlinx.collections.immutable, Kotlin的不可变集合 Prototype.zip

    kotlinx.collections.immutable, Kotlin的不可变集合 Prototype Kotlin的不可变集合库 Kotlin的不可变集合接口和实现 Prototype 。有关详细信息,请参阅建议列表。Prototype实现基于 pcollections ( 版权 2015的作者...

    java-immutable-collections:Java的高效ImmutablePersistent集合

    Java库的不可变集合(JImmutable Collections)是一组高性能的不可变集合,用于替换或补充标准的java.util集合。 为每个最常用的集合提供功能替换: Java类 JImmutable接口 工厂方法 数组列表 JImmutableList ...

    Collections源码java-java11-streams-laziness-needs-immutable-collections:使

    java11-streams-laziness-needs-immutable-collections 使用可变集合作为流源的示例可能会在处理过程中引起认知中断。 参考: 前言 流在几个方面与集合有所不同: 没有存储空间。 流不是存储元素的数据结构。 而是...

    kotlinx.collections.immutable:Kotlin的不可变持久集合

    在Kotlin编程中,`kotlinx.collections.immutable`库提供了对不可变和持久性集合的支持。这个库是Kotlin生态系统的一部分,旨在帮助开发者构建更安全、更易于维护的代码,尤其是在多线程环境中。不可变集合是那些...

    Collections

    ### Collections in iOS Development #### About Collections In the realm of iOS development, collections play a crucial role in organizing and managing data. The Apple documentation on collections ...

    Immutable详解及React中实践.pdf

    "Immutable 详解及 React 中实践" Immutable 是一种编程概念,指的是一旦创建,就不能再被更改的数据。它可以解决共享的可变状态问题,提高应用的性能和可维护性。本文将对 Immutable 的概念、实现原理、常见库和在...

    Docker and Immutable Infrastructure

    1.Overview of Docker the company and growth 2.Overview of Docker the latest stuff (DCUS announcements) & CaaS;...4.Docker and Immutable infrastructure/Microservices working together.

    java-immutable-collections:Java不可变的基于数组的集合

    ImmutableCollections-基于数组的Java不可变集合 版权所有(c)2017 Nicholas Cull 有关许可信息,请参阅LICENSE.txt。 Java 1.8的基于数组的不可变集合 排序和未排序的变体 风格类似于番石榴收集包装 空友好 Java 8...

    前端开源库-immutable-core

    **前端开源库-immutable-core详解** 在前端开发领域,优化性能和提高代码可维护性是开发者不断追求的目标。为此,各种工具和库应运而生,其中“immutable-core”是一个非常重要的概念,它代表着一种不可变数据处理...

    Google-Guava-Collections-使用介绍

    而 Guava 提供的 `ImmutableCollections` 真正实现了不可变性,确保集合一旦创建就无法被修改,这对于多线程环境尤其有用。 - **创建示例**: ```java List&lt;String&gt; immutableList = ImmutableList.of("a", "b", ...

    前端开源库-immutable-ai

    **前端开源库 Immutable.js** Immutable.js 是一个 JavaScript 库,由 Facebook 的 React 团队开发并维护,它为开发者提供了一种在前端开发中高效处理数据的方法。该库的核心概念是不可变数据,即一旦创建,数据就...

    技术分享之immutable.js.pptx

    简单介绍Immutable.js的一个ppt,主要用于技术分享,内容为imuutabe常用的数据类型和常用的基础api,还有immutable的原理、优缺点的分析。

    Mastering Immutable.js epub

    Mastering Immutable.js 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    google-collections jar包

    1. **不可变映射**:`Maps.immutableMap()`方法允许我们创建一个不可变的映射,这种映射一旦创建,就不能再添加、删除或修改键值对。这在需要防止意外修改映射时非常有用,保证了数据的安全性。 2. **双向映射**:`...

    Node.js-immutable-Javascript不可变的持久化数据集合

    为了解决这些问题,`immutable.js` 库应运而生,它为Node.js开发引入了不可变数据集合的概念,同时也融入了函数式编程的思想。`immutable.js` 提供了一组高效、线程安全的数据结构,如列表(List)、映射(Map)、集...

    Google_Guava_Collections_使用介绍.pdf )

    1. **不可变集合(Immutable Collections)**:提供真正不可变的集合,替代了传统的`Collections.unmodifiableXXX()`方法,增强了集合的安全性和一致性。 2. **多重集(Multiset)**:允许元素重复出现,为需要统计元素...

Global site tag (gtag.js) - Google Analytics