java私有变量和_java – 大内部类和私有变量
有一件事我經歷了幾次,是一個服務類(如JBoss服務),由于助手內部類,它已經變得過大了.我還沒有找到打破班級的好辦法.這些助手通常是線程.這里有一個例子:
/** 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.
}
}
}
所以,如果我有幾個幫助者,而且他們都很復雜,那么整體類文件可以變得非常大.我喜歡內部類,因為它清楚了這些類是由服務完全擁有,并且只存在來幫助這個服務.我已經嘗試打破類,并將父級服務作為參考傳遞,這種工作主要是工作,但我不喜歡的是:
>我最終暴露了包級別的訪問器,所以分解的類可以獲得變量,而在我沒有暴露setter之前,因為內部類有直接訪問.
>另外,事情有點更加冗長,因為我不斷調用訪問器而不是基礎變量.一個小小的,被授予.
>便利方法(例如checkAssetIsValid()或某些)需要打包級別的暴露,所以幫助類可以調用它們,如前所述,內部類可以是私有的.
>更糟糕的是,我需要將服務實現類傳遞給輔助類構造函數,因為我不想在服務實現的接口中公開這些helpers方法,因為這迫使它們被公開.這可能會產生一些單元測試/嘲笑問題.
更糟糕的是,我想做的任何同步通過一些外部的便利方法泄露出來(例如在輪詢器更新期間的lockDownAssets()).之前,內部類可以訪問私鑰.
所以簡而言之,打破這些課程會失去一些我喜歡的封裝.但是讓他們進入可能會導致一些大的java文件.我還沒有找到一個很好的辦法來處理這個問題. C有我很少錯過的“朋友”的概念,但在這種情況下實際上是有幫助的.
思考?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java私有变量和_java – 大内部类和私有变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 缩略图 库_Thumbnail
- 下一篇: 云存储技术-Zookeeper集群的安装