Java:仅在jar文件中公开一个软件包

发布于 2021-01-30 17:50:16

我想拥有一个jar文件,在其中只能访问API包。所有其他包(包含实现)都不能被另一个jar(也不能由任何其他类)访问。

可能吗 ?

如果是,怎么办?

关注者
0
被浏览
125
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    当前计划用于Java 8(2012?)的是JSR
    294
    。该JSR将更好的模块化语言构造引入Java。

    如今,实现可以划分为多个程序包。这种实现的各个子部分之间必须比与周围的软件环境更紧密地耦合在一起。如今,设计人员被迫将实现的其他子部分所需的程序元素声明为公共,从而使它们在全球范围内均可访问,这显然是次优的。

    或者,可以将整个实现放在单个程序包中。这解决了上面的问题,但是麻烦,并且使所有子部件的所有内部部件彼此暴露。

    预期的语言更改将解决这些问题。特别是,我们希望在语言级别引入一个新的模块( 超级包
    )概念,其中现有的公共访问控制将仅在语言级别的模块内应用,并且 从模块外部访问API的方式将仅限于该模块显式导出的API。

    现在,我相信专家组仍在讨论此概念的细节。但是我相信您可能可以做的一件事就是这样(来源:Java 7.0中的Super
    Packages
    ):

    superpackage com.myorg.myApp.model
    {
        member package com.myorg.myApp.model.swing;
    
        member package com.myorg.myApp.model.html;
    
        export com.myorg.myApp.model.swing.SEmployee;
        export com.myorg.myApp.model.swing.SDepartment;
    
        export package com.myorg.myApp.model.html;
    }
    

    换句话说,对于给定的“超级包”,您可以独立于可见性关键字(如)定义导出的内容和不导出的内容public



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看