【问题标题】:Is it possible to seal classes in a jar file?是否可以在 jar 文件中密封类?
【发布时间】:2013-06-30 06:41:01
【问题描述】:

所以我知道可以通过将 seal 属性设置为 true 来密封 jar 文件中的包,但是否可以对清单中的类条目执行相同操作?

如果 Boot.class 存在或密封仅用于包,下面的这个密封属性会起作用吗?

例子:

清单版本:1.0 名称:com/myCompany/randompackage/Boot.class 密封:真实

【问题讨论】:

标签: java jar manifest sealed


【解决方案1】:

封类没有任何意义。您只能密封一个包裹,因为只有一个包裹需要保护。没有必要保护一个类,因为不可能将一个类的内容分散到两个文件中。只能将一个包的类分布在两个 JAR 上。密封意味着防止这种情况发生。尽管它不是默认值,但将其设为默认值是个好主意。

示例

Alice 编写了一个名为alice 的包,其中包含alice.Dataalice.Work 两个类。 Data 类包含一些不得更改的变量。否则 Work 类中的代码可能会失败。 Alice 将 Data 类声明为包私有,因为 Work 类需要访问数据。现在,她将包的两个类都放入名为 alice.jar 的 JAR 中,并将 JAR 交给 Bob。

但是 Bob 需要做更多的工作,并要求 Mallory 编写另一个类,因为 Alice 已经在做其他事情了。因此,Mallory 编写了一个名为 mallory 的包并实现了所需的名为 mallory.Work 的类。但是马洛里很嫉妒,想诋毁爱丽丝,并写了另一个名为alice.Anger的课程。然后她将这两个类放入名为 mallory.jar 的 JAR 中,并将 JAR 交给 Bob。

Bob 使用这两个 JAR 并在处理 Alice 的代码时遇到了问题,因为来自 mallory.jar 的类 alice.Anger 对包 alice 具有包私有访问权限,并破坏了 alice.Data 中的数据。

如果 Alice 密封了她的 JAR,Mallory 就不可能在属于包 alicemallory.jar 中放置一个类。 Java 会拒绝这个 JAR,因为已经有另一个 JAR 包含包 alice,并且每个包只能在一个 JAR 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2021-04-17
    • 2012-03-20
    • 1970-01-01
    相关资源
    最近更新 更多