在C#中,我可以使用关键字internal限制对项目(dll)中其他类的访问。
在Java中,与类internal最接近的是包保护(默认)。但这对我不起作用,因为我在同一个maven模块中有其他包需要访问这个类。
如何让我的类可以访问我的maven模块(jar)中的所有类,而不是我的模块之外的类?
我已经看过this了。该帖子没有涉及模块中的其他包。
答案 0 :(得分:1)
正如您所说,最接近的匹配是当前的package-private修饰符。您可以不使用任何其他访问修饰符关键字private
,protected
和public
来应用它。
Jigsaw集成到Java 9中。它为Java模块化添加了本机支持。这将允许您隐藏其他模块中的包:其他模块无法从隐藏包中看到任何内容,甚至公共类也看不到。因此,将使用模块系统将类似于C#的internal
访问修饰符的机制引入Java 9。但是,它不会有新的访问修饰符。
目前,您最好使用OSGi。它使您能够通过应用一些类加载器魔法来模块化Java代码(魔术由OSGi完成,您不需要自己完成)。它不是标准JRE的一部分,但它是一个单独的框架。在OSGi中,模块称为bundle。捆绑包具有外部接口,由一组导出的包定义。其他包只能使用导出包中的类。但是,bundle本身可以使用放在任何包中的代码。这允许您隐藏其他包中的类,就像internal
关键字一样。
请记住,使用OSGi并非易事。使用和设置可能非常复杂。此外,它可能不适合应用程序服务器,它也倾向于做一些类加载器魔术。