[英]Controlling Class Visibility in Java
我的項目目前具有以下軟件包結構。
在這里,我添加了一個程序包名稱utils
並在其中定義了與此模塊相關的所有實用程序類。 這些已被其他軟件包(即impl
, internal
)使用,因此我將util
軟件包中的類和方法util
public
。
因為,這是公共的,所以不僅此模塊中的類,其他模塊中的類也可以訪問它,當我使用IDE進行編碼時,它們將顯示為編碼建議。
我瀏覽了幾篇研究論文,描述了這如何降低API的可用性並給參與開發的開發人員以糟糕的體驗[ref1 , ref2] 。
我知道Java不允許我使util
內部的類可用於impl
和內部包,而不impl
其他人訪問。
將實用程序類放入“ util”包是否正確? 還是應該將所有相互通信的類放在同一個包中?
實用程序類很好。 實用程序類是在項目中的多個位置使用但實際上並不屬於特定類的功能。
在OOP的完美世界中,不會有任何util類,但是,如果不屬於特定類,則創建util類被認為是一種好習慣。
您在此處列出了用於訪問修飾符的選項: https : //docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
有一種方法可以實現您想要的目標,但是這被認為是非常糟糕的做法。 您可以將util類的訪問修飾符更改為protected
。 這將使您的util類可以從子類和包中訪問。 因此,如果一個類需要訪問util類之一,則它必須擴展此util類,從而成為子類。 我不能強調它,這是一個非常糟糕的做法。
沒錯,標記為public的東西可以在其他任何軟件包中使用。 與其他語言相比,Java除了提供其他功能外,不提供任何控制。
一個簡單的解決方法:擁有一個特殊的軟件包,其中包含那些應該供外部用戶使用的公共物品,可能會有所幫助。
含義:創建類似com.whatever.product.api
類的com.whatever.product.api
-並指示您的用戶可以使用此處的所有內容,但別無其他。
換句話說:您將所有需要公開的東西都公開了; 但是您將這些東西收集在允許他人使用的特殊地方。
值得一提的是,Java9將引入模塊的概念,這些概念使您可以定義哪些軟件包應該對模塊用戶 公開 。 從這個意義上講,java 9模塊允許您區分“內部”和“外部” public 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.