是否可以在jar文件中封装类?

时间:2013-06-30 06:41:02

标签: java jar manifest sealed

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

如果Boot.class存在或密封仅适用于包,那么下面的密封属性是否可用?

示例:

Manifest-Version: 1.0

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

1 个答案:

答案 0 :(得分:8)

密封课程没有任何意义。您只能密封包装,因为只有包装需要保护。不需要保护类,因为不可能将一个类的内容分散到两个文件中。只能将一个包的类扩展到两个JAR上。而密封意味着防止这种情况虽然它不是默认值,但最好将其设为默认值。

示例

Alice写了一个名为alice的包,其中包含两个类alice.Dataalice.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。