java - 是否可以将类密封在 jar 文件中?

标签 java jar manifest sealed

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

如果 Boot.class 存在或 sealed 仅用于包,下面的 sealed 属性是否有效?

例子:

Manifest-Version: 1.0

Name: com/myCompany/randompackage/Boot.class 
Sealed: true 

最佳答案

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

示例

Alice 编写了一个名为alice 的包,其中包含两个类alice.Dataalice.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 就不可能将类放入属于包 alicemallory.jar 中。 Java 会拒绝这个 JAR,因为已经有另一个包含包 alice 的 JAR,并且每个包只能在一个 JAR 中。

关于java - 是否可以将类密封在 jar 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17387879/

相关文章:

visual-studio-2008 - VS2008 到 VS2010 项目升级后出现 "manifest signing certificate"错误

winapi - 应用 list 模式

java - 读取学生姓名和文本分数的文本文件并计算平均值

java - 无法在 Swing Explorer 中加载主类

java - FileInputstream 和 BufferedInputStream 在 4.0.3 中工作,但在 4.2.2 中不起作用

java - Pentaho 数据集成用户定义的 Java 类

java - 我的 .jar 文件在 Java 中不工作

google-chrome-extension - 发生错误 : Failed to process your item

java - EJB 3,同一 bean 中的事务流

java - Android 匹配右大括号时出现正则表达式模式错误