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

时间:2016-02-26 00:02:35

标签: java maven maven-3

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

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

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

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

1 个答案:

答案 0 :(得分:1)

正如您所说,最接近的匹配是当前的package-private修饰符。您可以不使用任何其他访问修饰符关键字privateprotectedpublic来应用它。

计划将

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

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

请记住,使用OSGi并非易事。使用和设置可能非常复杂。此外,它可能不适合应用程序服务器,它也倾向于做一些类加载器魔术。