2013-06-30 39 views
0

所以我知道可以通過將sealed屬性設置爲true來封裝jar文件中的包,但是可以對清單中的類條目執行相同的操作嗎?是否可以密封jar文件中的類?

如果Boot.class存在或僅封裝僅用於軟件包,此密封屬性將在下面工作嗎?

實施例:

 
Manifest-Version: 1.0 

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

你打算通過封閉某個班級來達到什麼目的? –

+0

http://docs.oracle.com/javase/tutorial/deployment/jar/sealman.html –

+0

我讀過這篇文章,它只顯示瞭如何封裝一個包,我想知道是否可以爲類入口 – user2352835

回答

6

它沒有任何意義,以密封的類。您只能密封一個包裝,因爲只有一個包裝需要保護。沒有必要保護一個班級,因爲無法將一個班級的內容分散到兩個文件中。只能將一個包的類擴展到兩個JAR上。密封意味着防止這種情況。雖然它不是默認值,但將其設置爲默認值是個好主意。

Alice寫了一個叫做alice,它包含兩個類alice.Dataalice.Work。 Data類包含一些不能更改的變量。否則,Work類中的代碼可能會失敗。 Alice將Data類聲明爲私有包,因爲Work類需要訪問數據。現在,她將兩個類的包放入名爲alice.jar的JAR中,並將JAR提供給Bob。

但Bob需要做更多的事情,並要求Mallory寫另一個類,因爲Alice已經在其他方面工作了。所以馬洛裏寫了一個名爲mallory的包,並實現了所謂的類mallory.Work。但馬洛裏很羨慕,並想詆譭愛麗絲,並寫了另一個類alice.Anger。然後她將兩個類放入名爲mallory.jar的JAR中,並將JAR提供給Bob。

鮑勃同時使用的JAR文件並運行與Alice's代碼的麻煩,因爲從mallory.jaralice.Anger一直包到包alice私接和alice.Data破壞數據。

如果Alice將她的JAR封閉,Mallory將不可能在屬於包alicemallory.jar中放置課程。 Java會拒絕這個JAR,因爲已經有另一個包含alice包的JAR,並且每個包只能在一個JAR中。

相關問題