2016-03-02 42 views
0

所以我真的想要某種方式來檢測某個對象的Field change。我搜索了一段時間,但沒有發現任何東西。所以基本上所有我需要知道的是,當某個對象的某個變量發生變化時。讓我們來看看這個類:java Field change listener

public class Example{ 
    String text = "test"; 

    public static void main(String[] args){ 
     Example e = new Example(); 
     e.text = "something else"; 
    } 
} 

我基本上想檢測'text'變量何時發生變化。 我知道你們中許多人會說使用getter和setter等,這不是我想要的。

由於我不能輕易解釋的原因,我需要能夠從課堂外檢測到場變化。目前我正在考慮使用第二個線程,該線程基本上只是連續掃描一系列對象,並使用反射來檢測這種變化,但這顯然會使程序比應該變得更重。

所以我希望有一種方法可以爲字段變更創建監聽器,有沒有人知道庫/系統/方法可以做到這一點?

+0

您正在尋找一個* assignation *偵聽器,但AFAIK在Java中沒有這樣的事情。可能唯一的辦法是使用一個忙碌的等待線程,就像你提到的那樣。或者,也許你可以繼承它並使用屬性方法? –

回答

2

讓我們把這個起死回生:)

有幾種方法:

第一個,我認爲作品一樣,因爲Java 6中,是使用Bound Properties inside Java Beans(是的,它也可以在JavaSE中)。

綁定屬性會在偵聽器的值發生更改時通知偵聽器。這有兩個含義:

bean類包括addPropertyChangeListener()和removePropertyChangeListener(),用於管理bean的偵聽器的方法。 當綁定屬性發生更改時,該bean向其註冊的偵聽器發送一個PropertyChangeEvent。 PropertyChangeEvent和PropertyChangeListener位於java.beans包中。

java.beans包中還包含一個類PropertyChangeSupport,它負責處理綁定屬性的大部分工作。這個方便的類跟蹤屬性監聽器,並且包含一個便利的方法,它將屬性更改事件觸發到所有註冊的監聽器。

第二,你可以免費獲得大部分的東西,它的Java 7(javafx 2.0)和it's called JavaFX Properties

您還可以添加一個變化監聽時該屬性的值已更改通知,如圖中還可以添加一個變化監聽時該屬性的值已更改通知。

後者的缺點是JPA對此並不友好,因此讓它運行起來有點痛苦。

+0

你的解決方案都是關於* property *改變監聽器,而不是* field *。 –

+0

@MicheleMariotti: OP說:「所以我基本上只需要知道,當一個類的某個變量發生變化時」。 如果他將變量定義爲Property類型,他可以將事件在課程外面冒泡,或者我認爲。 –

+0

然而,OP說:*我知道你們中許多人會說使用getter和setters等,這不是我想要的*。那麼,屬性是基於** getters和setters **。在您發佈的第一個鏈接中,清楚地說明了**:要在bean類中定義屬性,請提供public getter和setter方法*。 –