假设我编写了一个名为的模块/库mylib
,它使用了一个名为 的内部/隐藏的第三方模块/库internal
。mylib的 API不公开该第三方库的任何功能,并且在不久的将来它可能会被其他东西取代。
module mylib {
requires internal;
exports some.pgk.from.mylib;
}
但这是我的问题。内部库需要对通过mylib的公共 API 传递的类/对象进行反射访问才能完成工作。
使用我的库命名的示例应用程序/模块app
必须定义以下 moduleinfo.java
module app {
requires mylib;
opens some.pkg.from.app to internal;
}
但这很糟糕,因为它会将内部使用的模块暴露给我的库的用户,并且我将来无法在不破坏app的情况下删除/更改它。理想情况下,我希望允许模块内部反射访问对mylib开放的所有模块:
module app {
requires mylib;
opens some.pkg.from.app to mylib; // also open to internal without naming it
}
这可以用当前的(Java 17)模块系统来完成吗?如果这是不可能的,是否有一个好的解决方法?