所以我知道可以通过将sealed属性设置为true来封装jar文件中的包,但是可以对清单中的类条目执行相同的操作吗?
如果Boot.class存在或密封仅适用于包,那么下面的密封属性是否可用?
示例:
Manifest-Version: 1.0 Name: com/myCompany/randompackage/Boot.class Sealed: true
答案 0 :(得分:8)
密封课程没有任何意义。您只能密封包装,因为只有包装需要保护。不需要保护类,因为不可能将一个类的内容分散到两个文件中。只能将一个包的类扩展到两个JAR上。而密封意味着防止这种情况虽然它不是默认值,但最好将其设为默认值。
示例强>
Alice写了一个名为alice
的包,其中包含两个类alice.Data
和alice.Work
。 Data类包含一些不得更改的变量。否则,Work类中的代码可能会失败。 Alice将Data类声明为包private,因为Work类需要访问数据。现在,她将包的两个类放入名为alice.jar
的JAR中,并将JAR提供给Bob。
但鲍勃还需要做更多的工作,并要求马洛里写另一个班级,因为爱丽丝已经在其他方面工作了。因此,Mallory编写了一个名为mallory
的包,并实现了所需的类mallory.Work
。但马洛里很羡慕并且想要诋毁爱丽丝并写下另一个名为alice.Anger
的班级。她将这两个类放入名为mallory.jar
的JAR中,并将JAR交给Bob。
Bob使用两个JAR并且在使用Alice的代码时遇到麻烦,因为来自alice.Anger
的类mallory.jar
具有对包alice
的包私有访问权限,并且中断了alice.Data
中的数据{1}}。
如果Alice已经密封了她的JAR,那么Mallory就不可能在属于包mallory.jar
的{{1}}中放置一个类。 Java会拒绝这个JAR,因为已经存在另一个包含包alice
的JAR,并且每个包必须只包含一个JAR。