2

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

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

例子:

清单版本:1.0

名称:com/myCompany/randompackage/Boot.class
密封:真实
4

1 回答 1

9

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

例子

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

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

Bob 使用了这两个JAR并且在处理 Alice 的代码时遇到了麻烦,因为alice.Anger来自.mallory.jaralicealice.Data

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

于 2013-11-29T17:00:59.060 回答