簡體   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