java私有变量和_java – 大内部类和私有变量
有一件事我經(jīng)歷了幾次,是一個服務(wù)類(如JBoss服務(wù)),由于助手內(nèi)部類,它已經(jīng)變得過大了.我還沒有找到打破班級的好辦法.這些助手通常是線程.這里有一個例子:
/** Asset service keeps track of the Metadata about assets that live on other
* systems. Complications include the fact the assets have a lifecycle and their
* physical representation lives on other systems that have to be polled to find
* out if the Asset is still there. */
public class AssetService
{
//...varIoUs private variables
//...varIoUs methods
public AssetService()
{
Job pollerJob = jobService.schedule( new AssetPoller() );
Job lifeCycleJob = jobService.schedule( AssetLifecycleMonitor() );
}
class AssetPoller
{
public void run()
{
// contact remote systems and update this service's private variables that
// track the assets.
}
}
class AssetLifecycleMonitor
{
public void run()
{
// look for assets that have meet criteria for a lifecycle shift
// and update this service's private variables as relevant.
}
}
}
所以,如果我有幾個幫助者,而且他們都很復(fù)雜,那么整體類文件可以變得非常大.我喜歡內(nèi)部類,因為它清楚了這些類是由服務(wù)完全擁有,并且只存在來幫助這個服務(wù).我已經(jīng)嘗試打破類,并將父級服務(wù)作為參考傳遞,這種工作主要是工作,但我不喜歡的是:
>我最終暴露了包級別的訪問器,所以分解的類可以獲得變量,而在我沒有暴露setter之前,因為內(nèi)部類有直接訪問.
>另外,事情有點更加冗長,因為我不斷調(diào)用訪問器而不是基礎(chǔ)變量.一個小小的,被授予.
>便利方法(例如checkAssetIsValid()或某些)需要打包級別的暴露,所以幫助類可以調(diào)用它們,如前所述,內(nèi)部類可以是私有的.
>更糟糕的是,我需要將服務(wù)實現(xiàn)類傳遞給輔助類構(gòu)造函數(shù),因為我不想在服務(wù)實現(xiàn)的接口中公開這些helpers方法,因為這迫使它們被公開.這可能會產(chǎn)生一些單元測試/嘲笑問題.
更糟糕的是,我想做的任何同步通過一些外部的便利方法泄露出來(例如在輪詢器更新期間的lockDownAssets()).之前,內(nèi)部類可以訪問私鑰.
所以簡而言之,打破這些課程會失去一些我喜歡的封裝.但是讓他們進(jìn)入可能會導(dǎo)致一些大的java文件.我還沒有找到一個很好的辦法來處理這個問題. C有我很少錯過的“朋友”的概念,但在這種情況下實際上是有幫助的.
思考?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的java私有变量和_java – 大内部类和私有变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 缩略图 库_Thumbnail
- 下一篇: 云存储技术-Zookeeper集群的安装