因此也产生了疑惑。情景如下:
我建立了两个项目,项目 A 创建了 module-info.java 导出了但未进行 open com.txcf,包下有一个类 AA ,其中有一个私有变量 a ;
另一个项目 B 实验情况如下:
第一次创建了 module-info.java 我试图通过反射访问 A 模块 AA 类的私有变量 a,报错:InaccessibleObjectException ,这是预期发生的情况。
第二次我删除了 module-info.java ,该模块变为未命名模块,我试图通过反射访问 AA 类的私有变量 a,却能访问了。
奇怪的是我在第一次和第二次的情况中都不能访问 java.util 中的类的私有成员变量,比如 ArrayList 中的 size 变量。
我在通过 debug 时发现,第一次的情况,调用类和被调用类的 class 获取到的 Module 是两个不同的模块(这也符合预期情况),但是第二次的情况获取的 Module 却是相同的 Module 实例(都是未命名模块)
问题:
1 、非 jdk 官方模块在被未命名模块导入时,被导入模块无论是否命名都会直接导入到未命名模块吗?
2 、问题 1 成立(实验似乎也如此)的话,为何 jdk 官方只保护自己的模块,不保护第三方已命名模块呢?或者说是可以有参数开启保护的呢?