java中是否有相应的内部保护?

参见英文答案 >
Equivalent of internal in java                                    1个

在C#中,我可以使用关键字
internal限制对项目(dll)中的其他类的访问.

在Java中,最接近internal的类是包保护(默认).但这对我不起作用,因为我在同一个maven模块中有其他包需要访问这个类.

如何使我的类可以访问我的maven模块(jar)中的所有类,而不是我模块之外的类?

我已经看过this.该帖子没有涉及模块中的其他软件包.

最佳答案 正如您所说,最接近的匹配是当前的package-private修饰符.您可以通过不使用任何其他访问修饰符关键字private,protected和public来应用它.

Jigsaw计划集成到Java 9中.它为Java模块化添加了本机支持.这将允许您隐藏其他模块中的包:其他模块无法从隐藏包中看到任何内容,甚至公共类也看不到.因此,将使用模块系统将类似于C#的内部访问修饰符的机制引入Java 9.但是,它不会有新的访问修饰符.

现在,你最好用它来使用OSGi.它使你能够通过应用一些类加载器魔法来模块化你的Java代码(魔术是由OSGi完成的,你不需要自己动手).它不是标准JRE的一部分,但它是一个单独的框架.在OSGi中,模块称为bundle.捆绑包具有外部接口,由一组导出的包定义.其他包只能使用导出包中的类.但是,bundle本身可以使用放在任何包中的代码.这允许您隐藏其他包中的类,就像内部关键字一样.

请记住,使用OSGi并不是一个简单的决定.使用和设置可能非常复杂.此外,它可能不适合应用程序服务器,它也倾向于做一些类加载器魔术.

点赞