2010-03-03 143 views
0

我有一個名爲BOM的對象類。 它有一個方法getChildItem(),它返回一個Item對象。Java對象持久性問題

比方說,我這樣做:

BOM model = new BOM(); 
Item child = model.getChildItem(); 
ArrayList a = new ArrayList(); 

a.add(child); 
model.close(); 

會發生什麼?它:

  • 其實並沒有關閉模式,因爲該節點的陣列中的
  • 仍接近該模型爲子對象,一旦創建,是獨立於模型bject的。
  • 關閉模型,並設置子對象爲null(我敢肯定,這不會發生,那將肆虐,似乎違反直覺Java垃圾收集方法)

回答

1

不可能說你的close()方法做什麼。可能你正在考慮像關閉數據庫結果集或inputStream那樣值不可用?情況並非如此,除非你以這種方式明確地構建了你的對象,它們不是核心語言的一部分。

從上下文中我認爲你的意思是「父對象超出範圍時會發生什麼?」 (即符合垃圾收集)

什麼情況是這樣的:

BOM model = new BOM(); 
Item child = model.getChildItem(); 
// you now have a handle to the child object. Presumably, so does model, but we don't care about that. 
ArrayList a = new ArrayList(); 
a.add(child); 
//a now has a handle to child. 
model.close(); 
// child is not eligible for garbage collection because a still has a handle to it. 
0

兩個孩子和模式將成爲相同的基礎對象。關閉將在模型上被調用,因此任何依賴於它的對孩子的訪問都將失敗。

希望有所幫助。