所以我知道可以通过将 sealed 属性设置为 true 来将包密封在 jar 文件中,但是是否可以对 list 中的类条目执行相同的操作?
如果 Boot.class 存在或 sealed 仅用于包,下面的 sealed 属性是否有效?
例子:
Manifest-Version: 1.0 Name: com/myCompany/randompackage/Boot.class Sealed: true
最佳答案
封一个类没有任何意义。您可以只密封一个包裹,因为只有一个包裹需要保护。没有必要保护一个类,因为不可能将一个类的内容分散到两个文件中。只能将一个包的类分布到两个 JAR 中。密封意味着防止这种情况。虽然它不是默认设置,但将其设置为默认设置是个好主意。
示例
Alice 编写了一个名为alice
的包,其中包含两个类alice.Data
和alice.Work
。 Data 类包含一些不能更改的变量。否则 Work 类中的代码可能会失败。 Alice 将 Data 类声明为包私有(private),因为 Work 类需要访问数据。现在,她将包的两个类放入名为 alice.jar
的 JAR 中,并将 JAR 交给 Bob。
但是 Bob 还需要完成更多工作,并要求 Mallory 编写另一个类(class),因为 Alice 已经在做其他事情了。因此,Mallory 编写了一个名为 mallory
的程序包,并实现了所需的名为 mallory.Work
的类。但是 Mallory 很嫉妒,想抹黑 Alice,又写了一个类,叫做 alice.Anger
。她将这两个类放入名为 mallory.jar
的 JAR 中,并将 JAR 交给 Bob。
Bob 使用这两个 JAR 并且在使用 Alice 的代码时遇到了麻烦,因为 mallory.jar
中的类 alice.Anger
具有对包 alice
并破坏 alice.Data
中的数据。
如果 Alice 密封了她的 JAR,Mallory 就不可能将类放入属于包 alice
的 mallory.jar
中。 Java 会拒绝这个 JAR,因为已经有另一个包含包 alice
的 JAR,并且每个包只能在一个 JAR 中。
关于java - 是否可以将类密封在 jar 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17387879/