为了账号安全,请及时绑定邮箱和手机立即绑定

使类公开,但对 JAR 文件保持私有

使类公开,但对 JAR 文件保持私有

慕姐8265434 2022-06-15 10:07:41
有没有办法让 Java 类公开,但只能通过 JAR 文件公开?AKA,它不是包私有,而是包公共,但它不是 JAR 公开的?假设我有这样的结构:project/  package1/    One.java  package2/    Two.java  package3/    Three.java由于 3 个 .java 文件位于不同的包中,因此我需要将其公开。但是有没有办法让它们只对包含项目的 JAR 公开?这样如果另一个项目导入 JAR,它就看不到某些公共类/字段?
查看完整描述

3 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

使用Java 9 中的Jigsaw项目,您可以完全按照您可以决定要导出的包的方式执行此操作。例如:


module com.yourproject {

  exports com.yourproject.package1;

}

这将确保仅package1导出。


查看完整回答
反对 回复 2022-06-15
?
月关宝盒

TA贡献1772条经验 获得超5个赞

现有答案已经指出,适应这种情况的方法是将您的代码模块化(首先添加一个模块声明module-info.java)。只是参考sotms#module-declaration详细说明它们


exports可以添加子句来声明该模块使所有且仅public特定包中的类型可供其他模块使用:


module com.foo.bar {

    requires org.baz.qux;

    exports com.foo.bar.alpha;

    exports com.foo.bar.beta; 

如果一个模块的声明不包含导出子句,那么它根本不会将任何类型导出到任何其他模块。


并从 JLS 部分导出和打开的包


该exports指令指定要由当前模块导出的包的名称。对于其他模块中的代码,这将在编译时和运行时授予对包中的publicand类型以及这些类型的and成员的访问权限(第 6.6 节)。它还为其他模块中的代码授予对这些类型和成员的反射访问权限。protectedpublicprotected


并进一步涉及合格和不合格的出口......


对于限定指令,包中的公共和受保护类型,以及它们的公共和受保护成员,只能由 to 子句中指定的模块中的代码访问。子句中指定的模块to被称为当前模块的朋友。对于非限定指令,任何模块中的代码都可以访问这些类型及其成员。


查看完整回答
反对 回复 2022-06-15
?
慕神8447489

TA贡献1780条经验 获得超1个赞

是的,Java 9 引入了旨在解决此类问题的模块。



查看完整回答
反对 回复 2022-06-15
  • 3 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号