返回Map结构Unable to make field private static final long java.util.HashMap.serialVersionUID accessib问题
记录Unable to make field private static final long java.util.HashMap.serialVersionUID accessible问题
1.业务场景
公司开发一些接口,数据返回时有的采用了
ResultModel<List<Map<String,Integer>>
或Map<String,Integer>
这样的数据结构返回,采用JDk8
及一下版本,不会出现标题所属问题。而随着项目升级,公司采用了JDK21
版本,结果出现返回map时Unable to make field private static final long java.util.HashMap.serialVersionUID accessib
.
2.问题解释
这里主要问题就是讲的:在Java中,当你尝试通过反射(Reflection)访问一个类的私有(private)成员(如字段、方法等)时,如果没有足够的权限(即没有使用正确的访问控制标志),你会遇IllegalAccessException。这个异常表明你试图违反Java的访问控制规则。
你也许会很惊讶,我只是返回了一个
map结构呀,我干啥了我。别急,你细看
map底层,当你使用
map时,都是实现什么new hashMap<>()/new CurrentMapo new LinkedHashMap<>()并且还有个序列化的版本号
,
3.问题分析
主要是
JDK9
以后,有一个新特性叫做模块化
,具体请查看大佬写的博客JDk9模块化
4.问题解决
首先配置下环境变量
具体:Edit Configuratiuons -----> Modify options ----->勾选add VM Options------->在这个框里面补充以下命令
补充的运行条件
--add-opens
java.base/java.lang=ALL-UNNAMED
--add-opens
java.base/java.lang.reflect=ALL-UNNAMED
--add-opens
java.base/java.lang.invoke=ALL-UNNAMED
--add-opens
java.base/java.math=ALL-UNNAMED
--add-opens
java.base/sun.net.util=ALL-UNNAMED
--add-opens
java.base/java.io=ALL-UNNAMED
--add-opens
java.base/java.net=ALL-UNNAMED
--add-opens
java.base/java.nio=ALL-UNNAMED
--add-opens
java.base/java.security=ALL-UNNAMED
--add-opens
java.base/java.text=ALL-UNNAMED
--add-opens
java.base/java.time=ALL-UNNAMED
--add-opens
java.base/java.util=ALL-UNNAMED
最后,别忘记了点击保存哈,运行看看,是不是很OK;感谢阅读,觉得有用,点个关注多转发,您的支持是我最大的动力!!
更多推荐
所有评论(0)