使用Collections.singletonList()遇到的问题

示例代码

    @RequestMapping("/list")public Result list() {startPage();List<Byte> statusList = Collections.singletonList(DynamicContentConstants.BE_APPROVED);//List<Byte> statusList = new ArrayList<>();//statusList.add(DynamicContentConstants.BE_APPROVED);List<User> userList = userService.selectListByStatus(statusList);return Result.ok(userList);}

在JDK8中使用Collections.singletonList()方法构建集合时没有任何问题,而在JDK17中就会诱发一下问题:

nested exception is org.apache.ibatis.exceptions.PersistenceException: 
\r\n### Error querying database.  
Cause: java.lang.reflect.InaccessibleObjectException: Unable to make public int java.util.Collections$SingletonList.size() accessible: module java.base does not \"opens java.util\" to unnamed module @1530c739\r\n### 
Cause: java.lang.reflect.InaccessibleObjectException: Unable to make public int java.util.Collections$SingletonList.size() accessible: module java.base does not \"opens java.util\" to unnamed module @1530c739

经过大量的搜索,诱发此问题的原因是由Java模块系统的访问控制引起的。在Java 9及以上版本中,引入了模块系统(Project Jigsaw),这增加了对JVM内部API访问的限制。错误信息中的“Unable to make public int java.util.CollectionsSingletonList.size() accessible: module java.base does not "opens java.util" to unnamed module”表明,尝试访问`java.util`包中的`CollectionsSingletonList.size()accessible:modulejava.basedoesnot"opensjava.util"tounnamedmodule”表明,尝试访问‘java.util‘包中的‘CollectionsSingletonList类的size`方法时,因为模块化系统的访问限制而失败。

具体到你的情况,当你使用Collections.singletonList方法时,它返回的是一个不可变的单元素列表,这个列表是Collections$SingletonList的实例。这个实例在运行时可能因为Java平台模块系统的限制而无法被MyBatis正常访问和处理。

而当你使用new ArrayList<>()并手动添加元素时,返回的是一个标准的ArrayList实例,它没有受到Java模块系统访问控制的影响,因此MyBatis可以正常处理这个列表。

解决方案

一般来说,有几种方法可以解决或绕过这个问题:

  1. 使用ArrayList:就像你已经发现的那样,使用new ArrayList<>()而不是Collections.singletonList可以避免这个问题。如果你只需要添加一个元素,这是一个简单有效的解决方案。

  2. 配置JVM参数:如果你出于某些原因需要使用Collections.singletonList或其他可能受模块系统限制的方法,你可以尝试通过添加JVM启动参数来放宽访问限制。例如,可以尝试添加--add-opens java.base/java.util=ALL-UNNAMED参数给JVM。这会指示JVM放宽对java.util包内类的访问限制。请注意,这种方法可能会降低应用程序的安全性,因为它放宽了模块化系统的访问控制。

  3. 升级依赖库:确保你的应用依赖的库(如MyBatis)是最新版本,因为一些库可能已经修复了与Java模块系统相关的兼容性问题。

选择哪种方法取决于你的具体需求和约束。在大多数情况下,简单地使用ArrayList可能就足够了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/675654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node.js之npm单独与批量升级依赖包的方式

Node.js之npm单独与批量升级依赖包的方式 文章目录 Node.js之npm单独与批量升级依赖包的方式npm查看与升级依赖包1. 单独安装或升级最新版本2. 查看依赖但不升级1. npm outdated2. npm update 3. 批量升级新版本4. npm-check-updates1. 全局安装2. ncu查看可升级的版本3. 升级依…

MATLAB实现LSTM时间序列预测

LSTM模型可以在一定程度上学习和预测非平稳的时间序列,其具有强大的记忆和非线性建模能力,可以捕捉到时间序列中的复杂模式和趋势[4]。在这种情况下,LSTM模型可能会自动学习到时间序列的非平稳性,并在预测中进行适当的调整。其作为循环神经网络(RNN)的特殊形式,继承了循…

【Flink】FlinkSQL的DataGen连接器(测试利器)

简介 我们在实际开发过程中可以使用FlinkSQL的DataGen连接器实现FlinkSQL的批或者流模拟数据生成,DataGen 连接器允许按数据生成规则进行读取,但注意:DataGen连接器不支持复杂类型: Array,Map,Row。 请用计算列构造这些类型 创建有界DataGen表 CREATE TABLE test ( a…

项目02《游戏-09-开发》Unity3D

基于 项目02《游戏-08-开发》Unity3D &#xff0c; 本次任务是做抽卡界面&#xff0c;获取的卡片增添在背包中&#xff0c;并在背包中可以删除卡片&#xff0c; 首先在Canvas下创建一个空物体&#xff0c;命名为LotteryPanel&#xff0c;作为抽卡界面&#xff0c; …

MyBatis之动态代理实现增删改查以及MyBatis-config.xml中读取DB信息文件和SQL中JavaBean别名配置

MyBatis之环境搭建以及实现增删改查 前言实现步骤1. 编写MyBatis-config.xml配置文件2. 编写Mapper.xml文件&#xff08;增删改查SQL文&#xff09;3. 定义PeronMapper接口4. 编写测试类1. 执行步骤2. 代码实例3. 运行log 开发环境构造图总结 前言 上一篇文章&#xff0c;我们…

PySpark(三)RDD持久化、共享变量、Spark内核制度,Spark Shuffle、Spark执行流程

目录 RDD持久化 RDD 的数据是过程数据 RDD 缓存 RDD CheckPoint 共享变量 广播变量 累加器 Spark 内核调度 DAG DAG 的宽窄依赖和阶段划分 内存迭代计算 Spark是怎么做内存计算的? DAG的作用?Stage阶段划分的作用? Spark为什么比MapReduce快&#xff1f; Spa…

Could not connect to Redis at 127.0.0.1:6379:由于目标计算机积极拒绝,无法连接...问题解决方法之一

一、问题描述 将Redis压缩包解压后&#xff0c;安装Redis过程中出现问题Could not connect to Redis at 127.0.0.1:6379:由于目标计算机积极拒绝&#xff0c;无法连接... 官网windows下redis开机自启动的指令如下&#xff1a; 1、在redis目录下执行 redis-server --service-in…

GEE Colab——如何利用Matplotlib在colab中进行图形制作

在colab中绘制图表 笔记本的一个常见用途是使用图表进行数据可视化。Colaboratory 提供多种图表工具作为 Python 导入,让这一工作变得简单。 Matplotlib Matplotlib 是最常用的图表工具包,详情请查看其文档,并通过示例获得灵感。 线性图 线性图是一种常见的图表类型,用…

设置了.gitignore文件,但某些需要被忽略的文件仍然显示

经在项目中设置了.gitignore文件&#xff0c;但某些需要被忽略的文件仍然显示在 "Changes not staged for commit" 中&#xff0c;可能有几个原因&#xff1a; 1、文件已经被提交到版本控制中&#xff1a;如果文件已经被提交到版本控制中&#xff08;例如通过git ad…

按键扫描16Hz-单片机通用模板

按键扫描16Hz-单片机通用模板 一、按键扫描的原理1、直接检测高低电平类型2、矩阵扫描类型3、ADC检测类型二、key.c的实现1、void keyScan(void) 按键扫描函数①void FHiKey(void) 按键按下功能②void FSameKey(void) 按键长按功能③void FLowKey(void) 按键释放功能三、key.h的…

算法训练营day24补,回溯4-1

import ( "strconv" "strings" ) //判断ip是否合法 func isValid(s string) bool { if s ! "0" && s[0] 0 { return false } num, _ : strconv.Atoi(s) if num < 0 || num > 255 { return false } return true } 93. 复原 IP…

JavaScript综合练习2

JavaScript 综合练习 2 1. 案例演示 2. 代码实现 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title&…

Springboot根据环境读取application配置文件

目录 1. 首先创建两个不同配置文件 2. pom.xml 配置文件 3. 指定环境 4. 最后启动测试 1. 首先创建两个不同配置文件 分别为开发环境和生产环境 application-dev.properties 和 application-prod.properties application-dev.properties 配置为 1931 端口 application-pro…

放假--寒假自学版 day1(补2.5)

fread 函数&#xff1a; 今日练习 C语言面试题5道~ 1. static 有什么用途&#xff1f;&#xff08;请至少说明两种&#xff09; 1) 限制变量的作用域 2) 设置变量的存储域 2. 引用与指针有什么区别&#xff1f; 1) 引用必须被初始化&#xff0c;指针不必。 2) 引用初始…

[office] excel怎么在表格中画斜线 #经验分享#知识分享#媒体

excel怎么在表格中画斜线 在日常工作中&#xff0c;有时需要用excel做报表&#xff0c;而又经常会用到斜线表头。那么在excel表格中&#xff0c;如何画斜线呢?下面就跟小编一起看看吧。 excel在表格中画斜线的步骤 第一步我们首先打开要画斜线的excel表格 第二步对着表格右击&…

【大数据】Flink 中的 Slot、Task、Subtask、并行度

Flink 中的 Slot、Task、Subtask、并行度 1.并行度2.Task 与线程3.算子链与 slot 共享资源组4.Task slots 与系统资源5.总结 我们在使用 Flink 时&#xff0c;经常会听到 task&#xff0c;slot&#xff0c;线程 以及 并行度 这几个概念&#xff0c;对于初学者来说&#xff0c;这…

【网工】华为设备命令学习(服务器发布)

本次实验主要是内网静态nat配置没&#xff0c;对外地址可以理解为一台内网的服务器&#xff0c;外网设备可以ping通内网的服务器设备&#xff0c;但是ping不通内网的IP。 除了AR1设备配置有区别&#xff0c;其他设备都是基础IP的配置。 [Huawei]int g0/0/0 [Huawei-GigabitEt…

双指针和单调栈

双指针 用于解决一类基于子段的统计问题 子段就是&#xff1a;数组中连续的一段 可以用一个闭区间来表示数组中的连续一段 这个方法核心就是优化&#xff1a;两种循环的枚举 也就是枚举左端点l和右端点r的所有可能优化关键就是&#xff1a;去除枚举中的冗余部分 具体优化策略…

设计模式-行为型模式(下)

1.访问者模式 访问者模式在实际开发中使用的非常少,因为它比较难以实现并且应用该模式肯能会导致代码的可读性变差,可维护性变差,在没有特别必要的情况下,不建议使用访问者模式. 访问者模式(Visitor Pattern) 的原始定义是&#xff1a; 允许在运行时将一个或多个操作应用于一…

【linux开发工具】vim详解

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 “学如逆水行舟&#xff0…