Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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_Object_Design Patterns_Observer Pattern - Fatal编程技术网

Java 如何在构造函数中添加观察者?

Java 如何在构造函数中添加观察者?,java,object,design-patterns,observer-pattern,Java,Object,Design Patterns,Observer Pattern,因为我将registerObserver方法应用于weatherdata,但出于某种原因,它也在subject中注册。我不知道为什么 请有人给我解释一下。假设您有以下代码场景: public ShowEstadistics(WeatherData subject) { this.weatherdata=subject; this.weatherdata.registerObserver(this); }

因为我将registerObserver方法应用于weatherdata,但出于某种原因,它也在subject中注册。我不知道为什么


请有人给我解释一下。

假设您有以下代码场景:

public ShowEstadistics(WeatherData subject) {
         this.weatherdata=subject;
    
         this.weatherdata.registerObserver(this);
            
        } 
在这种情况下,你认为y的值是多少?它是包含5的整数对象吗? 答案是包含2的整数对象

当我们说
整数x=新整数(4)
时,我们的意思是x指向内存中的一个地址,该地址有一个包含值4的对象。类似地,对于y,y指向内存中的一个地址,该地址有一个值为5的对象。 然后写入
y=x
表示我们移除了对象包含5的地址上的指针,并将其指向x所指向的当前值为5的对象。包含5的对象的地址不再有任何变量指向它,因此,您不能调用或修改其值。将x和y指向的地址对象更改为值为2且
x=new Integer(2)
的对象后,调用这些变量中的任何一个都将返回相同的对象(因为它们具有相同的引用)


现在,这是一个基于
Integer
对象类型的基本示例,但可以应用于任何更复杂的对象。

因为
subject
weatherdata
引用相同的对象。不幸的是,您选择了一个基本数据类型来演示引用类型的行为。因此,你的例子是完全错误的;
y
的值不是
2
。您是对的。这是一个灾难性的错误。我忘记了基本类型的行为是不同的。我编辑了答案,谢谢。不幸的是,您选择了
Integer
作为演示,这里是通过值传递的。因此,您的示例仍然是完全错误的,因为
y
的值是
4
。您还使用了不推荐使用的构造函数。
public ShowEstadistics(WeatherData subject) {
         this.weatherdata=subject;
    
         this.weatherdata.registerObserver(this);
            
        } 
Integer x=new Integer(4);
Integer y=new Integer(5);
y=x;
x=new Integer(2);