Chr*_*sel 9 java jboss class-design
我遇到的一件事是服务类(比如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.
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以,如果我有几个帮助器并且它们都很复杂,那么整个类文件会变得非常大.我喜欢内部类,因为它表明这些类完全由服务拥有,并且仅存在于帮助该服务.我已经尝试打破这些类并将父服务作为参考传递,这主要起作用,但我不喜欢的是:
因此,简而言之,打破课程会失去一些我喜欢的封装.但是留下它们会导致一些大的java文件.我还没有找到解决这个问题的好方法.C++有"朋友"的概念,我很少想念,但在这种情况下实际上会有所帮助.
思考?
在字节码级别,内部类只是普通的Java类.由于Java字节码验证程序不允许访问私有成员,因此它为您使用的每个私有字段生成合成访问器方法.此外,为了将内部类与其封闭实例链接,编译器将合成指针添加到外部"this".
考虑到这一点,内部类只是一层语法糖.它们很方便,你列出了一些优点,所以我列出了一些你可能想要考虑的消极方面:
PS我在谈论非平凡的内部类(特别是那些没有实现任何接口的内部类).三线侦听器实现很好.
| 归档时间: |
|
| 查看次数: |
908 次 |
| 最近记录: |