Java中操作Map集合时:使用Map.of()添加数据报错 java.lang.UnsupportedOperationException 解决办法以及注意事项
创始人
2025-01-10 04:35:32
0次

背景

平时在开发过程中,会造一些假数据,比如给map集合添加一下假数据,每加一条数据,都进行put操作,比较麻烦,有没有快捷的办法呢?当然有,那就是使用Map.of()方法,他是jdk9 版本出现的api方法,可以快速的给map集合添加数据。

demo样例

Map map = Map.of(             "actTotal",12,             "sqlTotal",100,             "responseTime",20,             "oldestxactNum",43,             "oldestxactTime",7); 

这样写起来非常的方便简洁

突发情况

今天在工作中碰到一个问题,使用Map.of()方法,一直报错,源代码是这样的:

 @Test     public void test(){         Map m3 = Map.of( "TS_UTILIZATION_PERCENT", 77.13,             "TS_TOTAL_SIZE_KB", 2097152,             "EXE_TIME", "2024-06-14 13:54:22",             "TS_PAGE_TOP", 404224,             "TS_PAGESIZE", 4096,             "TS_TYPE", "D",             "DATA_TIME", "2024-06-14 13:54:22",             "TS_USABLE_SIZE_KB", 2096128,             "TS_NAME", "AFA_BEP_I",             "TS_DATATYPE", "L");         m3.put("TS_STATE", "NORMAL");         m3.put("US_TOTAL_SIZE",100);         m3.put("NO_US_TOTAL_SIZE",90);         for (Map.Entry entry : m3.entrySet()) {             System.out.println(entry.getKey() + "," + entry.getValue());         }     } 

报错信息如下:

java.lang.UnsupportedOperationException 	at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142) 	at java.base/java.util.ImmutableCollections$AbstractImmutableMap.put(ImmutableCollections.java:1072) 	at org.dromara.test.patrol.SimpleTest.test(SimpleTest.java:26) 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) 	at ...................... 

解决办法

Map.of()方法的返回值是一个不能改变的集合,集合不能再使用add,put方法添加元素,会抛出异常,也就是说Map.of()返回之后的集合,不能在往里面加数据了,所以正确写法应该是这样

@Test     public void test(){         Map m3 = Map.of( "TS_UTILIZATION_PERCENT", 77.13,             "TS_TOTAL_SIZE_KB", 2097152,             "EXE_TIME", "2024-06-14 13:54:22",             "TS_PAGE_TOP", 404224,             "TS_PAGESIZE", 4096,             "TS_TYPE", "D",             "DATA_TIME", "2024-06-14 13:54:22",             "TS_USABLE_SIZE_KB", 2096128,             "TS_NAME", "AFA_BEP_I",             "TS_DATATYPE", "L");         for (Map.Entry entry : m3.entrySet()) {             System.out.println(entry.getKey() + "," + entry.getValue());         }     } 

注意事项

  • Map.of()方法最多只能往里面添加10组数据,超过10组数据,会编译错误
    在这里插入图片描述
    通过源代码也可以,发现其中端倪
  static  Map of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,                                K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10) {         return new ImmutableCollections.MapN<>(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5,                                                k6, v6, k7, v7, k8, v8, k9, v9, k10, v10);     } 
  • Map.of()方法是一个不可变集合,对返回的集合,不能再添加数据,否则会报异常java.lang.UnsupportedOperationException

知识扩展

JDK9的新特性︰

List接口, Set接口,Map接口:里边增加了一个静态的方法of,可以给集合一次性添加多个元素

static Listof (E… eLements)

使用前提:

当集合中存储的元素的个数已经确定了,不在改变时使用

注意:
  1.of方法只适用于List接口,set接口,Map接口,不适用于接接口的实现类

2.of方法的返回值是一个不能改变的集合,集合不能再使用add,put方法添加元素,会抛出异常

3.Set接口和Map接口在调用of方法的时候,不能有重复的元素,否则会抛出异常

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...