是什么阻止您在包装中宣布其他类别的课程,从而使您可以访问包装私人会员

  • 本文关键字:包装 访问 布其他 是什么 其他 java
  • 更新时间 :
  • 英文 :


如果我在软件包中创建一个名为 MyClassA的项目 com/a/b/c

定义如下:

public class MyClassA {
    public static void main(String[] args) {
    }
    String sayHi() {
        return "hi";
    }
}

如果我将该项目导出为jar,并在软件包中创建另一个名为 MyCassA的项目,并在 com/a/b/c中导入我之前导出的jar,什么使我无法看到包裹受保护的方法 sayHi()

我通过删除我作为罐子导出的第一个项目来尝试此操作。当我尝试此操作时,我会遇到一个汇编错误,说该方法不可见。

答案告诉您,没有什么可以防止它错误的。

您可以密封包装。密封包是一个包裹,可以在一个.jar文件中定义。Java运行时将拒绝该软件包中定义的任何类。

密封包装很简单。在包含.jar文件的清单中,为该软件包添加一个部分,并包括一个 Sealed: true属性:

Name: com/a/b/c
Sealed: true

不多。虽然您不使用Java9,但启用了模块支持。

通过简单地"伪造"它们,偷偷溜入现有软件包是没有问题的。作为其他答案,您可以在JAR文件中通过元数据密封包装。而且,当您进一步考虑签署JAR文件时,似乎是可能的。但是我想即使那样,使用类加载器魔术也可能会有技巧。

在Java 8或更低中,没有什么可以不允许您这样做的。换句话说,允许。

在Java 9中,模块系统将强制执行软件包只能在单个模块中

相关内容

  • 没有找到相关文章

最新更新