日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java接口版本控制_为什么要在Java中控制类和接口的可见性

發(fā)布時(shí)間:2023/12/3 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java接口版本控制_为什么要在Java中控制类和接口的可见性 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java接口版本控制

維護(hù)是軟件開發(fā)的重要方面之一,并且經(jīng)驗(yàn)證明,保持較低組件可視性的軟件比暴露更多組件的軟件更易于維護(hù)。 您不會(huì)在一開始就意識(shí)到它,但是在重新設(shè)計(jì)應(yīng)用程序時(shí)會(huì)嚴(yán)重錯(cuò)過它。 由于保持向后兼容性是許多應(yīng)用程序的“必須具備”要求,因此最終會(huì)打補(bǔ)丁并重復(fù)同樣的錯(cuò)誤。 您不能做太多事情,因?yàn)樵S多其他應(yīng)用程序與您的類和接口緊密集成在一起。

Java從一開始就提供對(duì)訪問修飾符的支持,因此始終將封裝放在優(yōu)先地位。 它提供了三種方法來控制任何類型(例如,類或接口)的可見性,方法是將它們?cè)O(shè)置為公共,程序包私有或私有。 保護(hù)發(fā)生了什么事,我們不能將保護(hù)與類或接口一起使用。 不,您不能,您只能使用兩個(gè)具有類型的訪問修飾符,protected不是類或接口的合法修飾符。 另外,頂級(jí)類(其名稱與包含它的Java源文件的名稱相同)可以是公共的,也可以是包私有的(沒有任何訪問修飾符),也不能是私有的。

只有嵌套類可以是private,public或package-private 。 每個(gè)人都可以訪問公共類,并且它是最可見的。 嘗試僅公開關(guān)鍵接口,在您認(rèn)為實(shí)現(xiàn)完整且成熟之前,切勿公開您的實(shí)現(xiàn)。 另一方面,private Type是最不可見的,并且在Java中只有嵌套的類或接口可以是private。 由于它是最不可見的,因此您可以完全控制該類,以通過經(jīng)驗(yàn),新技術(shù),工具和重新設(shè)計(jì)來更改其行為。 一個(gè)聰明的中途是package-private可見性,這也是默認(rèn)的可見性,沒有像package-private這樣的關(guān)鍵字。 相反,如果您不提供任何訪問修飾符,則Java會(huì)假定它是程序包私有的,并隨后使其僅在同一程序包上可見。 如果您的類和接口僅在同一程序包中的其他類之間共享,請(qǐng)使它們成為程序包專用的。 由于客戶端無法訪問它們,因此更改它們也是相對(duì)安全的。

除了使用訪問修飾符降低類或接口的可見性之外,還有兩種其他方法可以執(zhí)行此操作,具體取決于您的運(yùn)行時(shí)環(huán)境。 在組件級(jí)別,例如在像Websphere,Weblogic或JBoss這樣的Application Server中,可以對(duì)實(shí)現(xiàn)類進(jìn)行代理或包裝,以最大程度地減少外部風(fēng)險(xiǎn)。 無論您做什么,總會(huì)有某種類型需要暴露給外部世界,但是使用代理或包裝,您仍然可以管理它們。 即使客戶端程序可以加載代理的實(shí)現(xiàn)類,它們也將大部分獲得不可變的代理或包裝。 例如,來自Java Servlet API(javax.servlet)的getServletContext()返回javax.servlet.ServletContext的實(shí)現(xiàn),該實(shí)現(xiàn)通常是不可變的代理,可以履行ServletContext接口中所作的承諾。 應(yīng)用服務(wù)器很可能以不同的javax.servlet.ServletContext接口實(shí)現(xiàn)運(yùn)行。 可以在其他外部暴露的接口(例如ServletRequest,ServletResponse,javax.ejb.EJBContext,javax.ejb.TimerService等)的實(shí)現(xiàn)中使用類似的模式。不同的應(yīng)用程序服務(wù)器可以使用不同的實(shí)現(xiàn)來支持這些全局接口。


編寫開源庫也是了解控制類和接口可見性需求的一種好方法。 另一個(gè)有趣的情況是基于組件的Java應(yīng)用程序服務(wù)器,例如JBoss,WebLogic或WebSphere。 這些服務(wù)器提供低級(jí)服務(wù),例如事務(wù)管理,安全性,持久性,對(duì)象池等。簡(jiǎn)而言之,生產(chǎn)系統(tǒng)使用應(yīng)用程序服務(wù)器的代碼以及應(yīng)用程序的代碼來完美地工作。 為了便于維護(hù)(例如在不同的應(yīng)用程序服務(wù)器之間切換),您的應(yīng)用程序和服務(wù)器代碼應(yīng)松耦合,并應(yīng)保持安全距離。 為了安全起見,應(yīng)從用戶應(yīng)用程序中完全隱藏應(yīng)用程序服務(wù)器的內(nèi)部實(shí)現(xiàn)類和接口。 如果應(yīng)用程序打包了服務(wù)器包含的相同庫,則必須注意服務(wù)器不要通過線程上下文類加載器無意中加載應(yīng)用程序的版本。

我最喜歡的EnumSet類是控制可見性的另一個(gè)有趣示例。 Java設(shè)計(jì)人員使其成為避免實(shí)例化的抽象類,并提供了工廠方法作為創(chuàng)建該類實(shí)例的唯一方法,例如EnumSet.of()或EnumSet.noneOf()方法。 在內(nèi)部,它們具有RegularEnumSet和JumboEnumSet形式的兩個(gè)單獨(dú)的實(shí)現(xiàn),這些實(shí)現(xiàn)由靜態(tài)工廠方法根據(jù)鍵Universe的大小自動(dòng)選擇。 例如,如果給定Enum中的值數(shù)小于64,則使用RegularEnumSet,否則返回JumboEnumSet的實(shí)例。 這種設(shè)計(jì)的優(yōu)點(diǎn)在于,這兩個(gè)實(shí)現(xiàn)都是私有包的,這意味著客戶對(duì)它們一無所知。 它們對(duì)用戶是完全透明的,并且通過將這些類抽象化可以增強(qiáng)安全性,因?yàn)槟鸁o法創(chuàng)建抽象類的實(shí)例 。 這不僅使您可以選擇最合適的實(shí)現(xiàn),而且很容易用更新更好的實(shí)現(xiàn)來替換它們。 盡管它們是一個(gè)非常特殊的類,RegularEnumSet使用一個(gè)長(zhǎng)值存儲(chǔ)枚舉常量。 恕我直言,這是從JDK本身控制類的可見性的絕佳示例。

簡(jiǎn)而言之,通過最小化可見性(還利用了封裝的優(yōu)勢(shì)),封裝良好的代碼將更加安全和可維護(hù)。 隨著技術(shù)的發(fā)展,無論您今天寫什么,都已經(jīng)過了幾年,所以遵循類設(shè)計(jì)的基本原則可以幫助您從更新的工具,庫和JDK實(shí)現(xiàn)中獲得最大收益。

翻譯自: https://www.javacodegeeks.com/2014/09/why-you-should-control-visibility-of-class-and-interface-in-java.html

java接口版本控制

總結(jié)

以上是生活随笔為你收集整理的java接口版本控制_为什么要在Java中控制类和接口的可见性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。