首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在构造函数中添加观察者?

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

Stack Overflow用户
提问于 2020-07-15 23:17:37
回答 1查看 307关注 0票数 0
代码语言:javascript
复制
public static void main(String[] args) {
        WeatherData subject =new WeatherData();
        new ShowEstadistics(subject);
} 


public class WeatherData implements Subject {

    ArrayList<Observer> observers;

    public WeatherData() {
        observers = new ArrayList();
    }

    @Override
    public void registerObserver(Observer o) {
        observers.add(o);
    }
}



public class ShowEstadistics implements Observer{

WeatherData weatherdata;

public ShowEstadistics(WeatherData subject) {
     this.weatherdata=subject;

     this.weatherdata.registerObserver(this);
        
    }

我不知道观察员是如何在本部分的主题中注册的:

代码语言:javascript
复制
public ShowEstadistics(WeatherData subject) {
         this.weatherdata=subject;
    
         this.weatherdata.registerObserver(this);
            
        } 

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

谁能给我解释一下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-15 23:58:30

假设您有以下代码场景:

代码语言:javascript
复制
Integer x=new Integer(4);
Integer y=new Integer(5);
y=x;
x=new Integer(2);

在这种情况下,你认为y的价值是多少?它是包含5的Integer对象吗?答案是包含2个的Integer对象。

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

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62925118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档