亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使類公開,但對 JAR 文件保持私有

使類公開,但對 JAR 文件保持私有

慕姐8265434 2022-06-15 10:07:41
有沒有辦法讓 Java 類公開,但只能通過 JAR 文件公開?AKA,它不是包私有,而是包公共,但它不是 JAR 公開的?假設我有這樣的結構:project/  package1/    One.java  package2/    Two.java  package3/    Three.java由于 3 個 .java 文件位于不同的包中,因此我需要將其公開。但是有沒有辦法讓它們只對包含項目的 JAR 公開?這樣如果另一個項目導入 JAR,它就看不到某些公共類/字段?
查看完整描述

3 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

使用Java 9 中的Jigsaw項目,您可以完全按照您可以決定要導出的包的方式執行此操作。例如:


module com.yourproject {

  exports com.yourproject.package1;

}

這將確保僅package1導出。


查看完整回答
反對 回復 2022-06-15
?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

現有答案已經指出,適應這種情況的方法是將您的代碼模塊化(首先添加一個模塊聲明module-info.java)。只是參考sotms#module-declaration詳細說明它們


exports可以添加子句來聲明該模塊使所有且僅public特定包中的類型可供其他模塊使用:


module com.foo.bar {

    requires org.baz.qux;

    exports com.foo.bar.alpha;

    exports com.foo.bar.beta; 

如果一個模塊的聲明不包含導出子句,那么它根本不會將任何類型導出到任何其他模塊。


并從 JLS 部分導出和打開的包


該exports指令指定要由當前模塊導出的包的名稱。對于其他模塊中的代碼,這將在編譯時和運行時授予對包中的publicand類型以及這些類型的and成員的訪問權限(第 6.6 節)。它還為其他模塊中的代碼授予對這些類型和成員的反射訪問權限。protectedpublicprotected


并進一步涉及合格和不合格的出口......


對于限定指令,包中的公共和受保護類型,以及它們的公共和受保護成員,只能由 to 子句中指定的模塊中的代碼訪問。子句中指定的模塊to被稱為當前模塊的朋友。對于非限定指令,任何模塊中的代碼都可以訪問這些類型及其成員。


查看完整回答
反對 回復 2022-06-15
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

是的,Java 9 引入了旨在解決此類問題的模塊。



查看完整回答
反對 回復 2022-06-15
  • 3 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號