2016-03-02 41 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方法*。 –