繁体   English   中英

Java应用程序/类设计-Java中的访问器如何工作?

[英]Java Application/Class Design - How do accessors in Java work?

如何编写getDB()函数并正确使用它?

这是我的App对象的代码段:

public class MyApp extends UiApplication {

    private static PersistentObject m_oStore;
    private static MyBigObjectOfStorage m_oDB;

    static {
        store = PersistentStore.getPersistentObject(0xa1a569278238dad2L);
    }

    public static void main(String[] args) {
        MyApp theApp = new MyApp();
        theApp.enterEventDispatcher();
    }
    public MyApp() {
        pushScreen(new MyMainScreen());
    }

    // Is this correct?  Will it return a copy of m_oDB or a reference of m_oDB?
    public MyBigObjectOfStorage getDB() {
        return m_oDB;  // returns a reference
    }

}
public MyBigObjectOfStorage getDB() {
  return m_oDB;
}

正如你所说的是正确的。 它将返回引用副本,该副本介于引用和副本之间。

getDB()返回的实际对象实例与m_oDB引用的对象相同。 但是,您不能将getDB()返回的引用更改为指向另一个对象,并实际上使本地私有m_oDB指向新对象。 m_oDB仍将指向它已经存在的对象。

有关更多详细信息,请参见http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html

尽管在那里查看代码,但根本没有设置m_oDB,因此getDB()将始终返回null。

public MyBigObjectOfStorage getDB() {
    Object o = store.getContents();
    if ( o instanceof MyBigObjectOfStorage ) {
        return (MyBigObjectOfStorage) o;
    } else {
        return null;
    }
}

我是非常反对使用单例和/或静态变量的人之一,因为它倾向于使单元测试变得不可能。 由于这是按照最佳实践发布的,因此建议您看一下使用依赖项注入框架的方法。 我个人使用的是Google Guice,并且更喜欢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM