2012-03-22 96 views
2

在Java中,只要對象的任何屬性發生更改,對象就會觸發事件的最優雅方式是什麼?Java - 當對象的任何屬性發生變化時觸發事件

我的域模型有幾個對象,如

class MyClass { 

    String id; 
    String name; 
    Collection<MyThing> mythings= new HashSet<MyThing>(); 
    // more fields... 
    Date lastUpdated; 

    //constructor, getters and setters, etc 
} 

我需要LASTUPDATED設置爲「今天」,只要任何屬性(ID /名稱/ mythings)的變化。

我寧願一個解決方案,是不是JDO特有的,絕對不希望在數據存儲區(在RDBMS等自動時間戳列)這個邏輯。

我可以把

this.lastUpdated = new Date(); 

在每一個二傳手,或火災在每一個二傳手自定義事件,但是這是醜陋且容易出錯。

有沒有更優雅的解決方案?

+0

FYI,這聽起來完全像什麼的Java bean是,你可能想看看他們。 – 2012-03-22 01:18:58

+1

AOP需要一個接口,除非你打算做字節碼增強。我通常不使用模型對象的接口。我不會爲這個用例推薦AOP。 – duffymo 2012-03-22 12:11:18

回答

1

您可以實現PropertyChangeListener接口和寄存器你對客戶的興趣。自從1.0以來它一直是Java Bean規範的一部分。

他們是不是所有的UI元素。它們被設想爲一種匹配IDE的VB類功能的方法(例如Bean Factory)。

http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html

http://weblogs.java.net/blog/joshy/archive/2006/02/all_hail_the_pr.html

+0

我碰到過那個。 http://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html#bound - 看看這些例子,似乎我仍然必須在setter中爲每個屬性設置firePropertyChange,以滿足我希望這種行爲的所有屬性? – MT1 2012-03-22 01:40:10

+0

你還期望如何發生? – duffymo 2012-03-22 09:18:59

+0

我希望有一個自動的「onUpdated」事件被埋在我可以使用的某個地方,或者一個具有我可以擴展的功能的類。你的答案似乎是「盡善盡美」;謝謝! – MT1 2012-03-23 18:32:47

相關問題