所以我知道可以通过将sealed 属性设置为true 来密封jar 文件中的包,但是是否可以对清单中的类条目执行相同的操作?
如果 Boot.class 存在或仅用于包的密封,下面的这个密封属性会起作用吗?
例子:
清单版本:1.0 名称:com/myCompany/randompackage/Boot.class 密封:真实
封类没有任何意义。您只能密封一个包裹,因为只有一个包裹需要保护。没有必要保护一个类,因为不可能将一个类的内容分散到两个文件中。只能将一个包的类分布在两个 JAR 上。密封意味着防止这种情况发生。尽管这不是默认设置,但将其设为默认设置是个好主意。
例子
Alice 编写了一个名为 的包alice
,其中包含两个类alice.Data
和alice.Work
。Data 类包含一些不得更改的变量。否则 Work 类中的代码可能会失败。Alice 将 Data 类声明为包私有,因为 Work 类需要访问数据。现在,她将包的两个类都放入名为alice.jar
JAR 的 JAR 中,并将 JAR 交给 Bob。
但是 Bob 需要做更多的工作,并要求 Mallory 编写另一个类,因为 Alice 已经在做别的事情了。因此,Mallory 编写了一个名为的包mallory
并实现了所需的名为mallory.Work
. 但是马洛里很嫉妒,想诋毁爱丽丝,并写了另一个名为alice.Anger
. 然后她将两个类都放入调用mallory.jar
的 JAR 中,并将 JAR 交给 Bob。
Bob 使用了这两个JAR并且在处理 Alice 的代码时遇到了麻烦,因为alice.Anger
来自.mallory.jar
alice
alice.Data
如果 Alice 密封了她的 JAR,那么 Mallory 就不可能在mallory.jar
属于包的 which中放置一个类alice
。Java 会拒绝这个 JAR,因为已经有另一个 JAR 包含该包alice
,并且每个包必须只在一个 JAR 中。