[英]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.