Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java字段更改侦听器_Java_Reflection_Field_Listener - Fatal编程技术网

java字段更改侦听器

java字段更改侦听器,java,reflection,field,listener,Java,Reflection,Field,Listener,所以我真的想要一些方法来检测某个物体的磁场变化。我在谷歌上搜索了好一阵子,但什么也没找到。所以基本上我只需要知道,当一个对象的某个变量发生变化时。以这个类为例: public class Example{ String text = "test"; public static void main(String[] args){ Example e = new Example(); e.text = "something else"; }

所以我真的想要一些方法来检测某个物体的磁场变化。我在谷歌上搜索了好一阵子,但什么也没找到。所以基本上我只需要知道,当一个对象的某个变量发生变化时。以这个类为例:

public class Example{
    String text = "test";

    public static void main(String[] args){
        Example e = new Example();
        e.text = "something else";
    }
}
我基本上希望检测“text”变量何时发生更改。 我知道你们中的许多人会说使用getter和setter等等,但这不是我想要的

由于一个我不容易解释的原因,我需要能够从课堂之外检测到字段的变化。目前,我正在考虑使用第二个线程,它基本上只是连续扫描对象列表,并使用反射来检测这样的更改,但这显然会使程序比必须的更重


因此,我希望有一种方法可以为字段更改创建侦听器,有人知道实现这一点的库/系统/方法吗?

让我们回到现实:)

有几种方法:

第一个是使用(是的,它也可以在JavaSE中使用),我相信它的工作原理与Java6类似

绑定属性的值更改时通知侦听器。这有两个含义:

bean类包括addPropertyChangeListener()和removePropertyChangeListener()方法,用于管理bean的侦听器。 当绑定属性发生更改时,bean将向其注册的侦听器发送PropertyChangeEvent。 PropertyChangeEvent和PropertyChangeListener位于java.beans包中

beans包还包括一个类PropertyChangeSupport,它负责绑定属性的大部分工作。这个方便的类跟踪属性侦听器,并包括一个方便的方法,该方法向所有注册的侦听器触发属性更改事件

在第二种情况下,您可以免费获得大部分内容,它是基于Java7(JavaFX2.0)和

您还可以添加更改侦听器,以便在属性值发生更改时收到通知,如中所示。您还可以添加更改侦听器,以便在属性值发生更改时收到通知


后者的缺点是JPA对此不友好,因此运行起来有点困难。

您的两种解决方案都是关于属性更改侦听器,而不是字段。@MicheleMariotti:OP说“基本上我只需要知道,类的某个变量何时更改”。如果他将变量定义为属性类型,他可以在类外冒泡事件,或者我认为是这样。尽管如此,OP说:我知道你们中的许多人会说使用getter和setter等等,但这不是我想要的。属性是基于getter和setter的。在您发布的第一个链接中,明确指出:要在bean类中定义属性,请提供公共getter和setter方法。第二个解决方案也不适用,因为即使将字段更改为值框类型,也不可能跟踪直接赋值,这正是OP真正想要的。$MicheleMariotti是对的,这似乎不是我想要的。然而,我不再从事我需要它的项目,但也许这个解决方案对其他人会很有用。你正在搜索一个分配侦听器,但在Java中没有这样的东西。可能唯一的方法就是使用一个繁忙的等待线程,就像你提到的那样。或者您可以将其子类化并使用属性方法?PUTFIELD和GETFIELD是JVM中非常简单的指令,它们直接在处理器的缓存中写入/读取值(如果声明为volatile,则在读/写之后缓存将直接刷新)。当他们有监听器时,JVM会非常慢。