java - Java 中是否有等效的内部保护?

标签 java maven maven-3

<分区>

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

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

如何让我的 maven 模块 (jar) 中的所有类都可以访问我的类,但不能让模块外的类访问?

我已经看到了 this .该帖子未涉及模块中的其他包。

最佳答案

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

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/

相关文章:

java - Spring Cloud快速入门演示maven

java - 在部署到远程存储库之前运行 Maven 插件

Maven 编译器插件

java - 为什么要在 Java 中调用 super() ?

java - 在 IntelliJ 中将 Maven 子模块添加到父模块

java - MongoDB 聚合变化以匹配天数差异匹配

maven - 使用 maven 从 uber jar 中排除 Spark

maven - 用于在远程机器上进行集成测试的 Jacoco 代理

java - 如何在 Vaadin 8 中从子线程获取访问 UI 线程

java - (spotify)Java的Maven docker构建器