<分区>
在 C# 中,我可以使用关键字 internal 限制对一个类和项目 (dll) 中其他类的访问。 .
在 Java 中最接近 internal对于一个类,是包保护(默认)。但这对我不起作用,因为我在同一个 Maven 模块中有其他包需要访问此类。
如何让我的 maven 模块 (jar) 中的所有类都可以访问我的类,但不能让模块外的类访问?
我已经看到了 this .该帖子未涉及模块中的其他包。
<分区>
在 C# 中,我可以使用关键字 internal 限制对一个类和项目 (dll) 中其他类的访问。 .
在 Java 中最接近 internal对于一个类,是包保护(默认)。但这对我不起作用,因为我在同一个 Maven 模块中有其他包需要访问此类。
如何让我的 maven 模块 (jar) 中的所有类都可以访问我的类,但不能让模块外的类访问?
我已经看到了 this .该帖子未涉及模块中的其他包。
最佳答案
正如您已经说过的,目前最接近的匹配项是 package-private 修饰符。您可以通过不使用任何其他访问修饰符关键字 private
、protected
和 public
来应用它。
Jigsaw计划集成到 Java 9 中。它为 Java 添加了对模块化的原生支持。这将允许您对其他模块隐藏包:其他模块看不到隐藏包中的任何内容,甚至是公共(public)类。因此,类似C#的internal
访问修饰符的机制将被引入Java 9的模块系统中。但是,不会有新的访问修饰符。
目前,最好使用 OSGi .它使您能够通过应用一些类加载器魔法来模块化您的 Java 代码(魔法由 OSGi 完成,您不需要自己动手)。它不是标准 JRE 的一部分,而是一个单独的框架。在 OSGi 中,模块称为束。 bundle 有一个外部接口(interface),由一组导出的包定义。其他包只能使用导出包中的类。但是,bundle 本身可以使用位于其任何包中的代码。这允许您从其他包中隐藏类,就像 internal
关键字一样。
请记住,使用 OSGi 并非易事。使用和设置可能非常复杂。此外,它可能不太适合应用程序服务器,因为应用程序服务器也倾向于执行一些类加载器魔术。
关于java - Java 中是否有等效的内部保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35640853/