【问题标题】:What is this line of code producing?这行代码产生了什么?
【发布时间】:2017-08-02 12:07:38
【问题描述】:

我一直在研究 head_first_design_Patterns 书中的观察者模式。场景是这样的“有一个名为 observers 的 ArrayList 并且它有所有正在实现 Observer 接口的观察者。 在书中,他们使用循环来更新所有观察者。循环是:

 for(int i=0; observers.size();i++)
 {
     Observer observer= (Observer) observers.get(i);
     observer.update(temperature,humidity,pressure);
 } 

我想知道循环的第一条语句是如何工作的。我们是否在这里创建对特定观察者的引用?

【问题讨论】:

  • 是的,您正在获得对 observers.get(i) 返回的对象的引用。您正在将此对象强制转换为(Observer),然后您可以使用局部变量observer 对其进行操作。
  • @Ravi:我认为这个问题与您链接的问题没有任何关系。
  • @uvesten 我只是指出这个问题首先要看看那个问题。因为,该问题提到了与此设计模式相关的代码

标签: java observer-pattern


【解决方案1】:

我想知道循环的第一条语句是如何工作的。是 我们在这里创建对特定观察者的引用?

此语句仅在指定index 处获取ArrayList 中的元素,并在将引用指向检索到的对象之前确保其为Observer 类型。

Observer observer= (Observer) observers.get(i);

如果转换成功,则使用对检索到的object 的引用来更新该特定object 的数据。

observer.update(temperature,humidity,pressure);

【讨论】:

  • 谢谢你的解释:)
【解决方案2】:

是的,您正在获得对observers.get(i) 返回的对象的引用。您正在将此对象强制转换为(Observer),然后您可以使用局部变量observer 对其进行操作。

【讨论】:

    【解决方案3】:

    第一行只是从列表中获取观察者。它创建对现有对象的新引用

    【讨论】:

    • 声明中的 (Observer) 是什么意思?
    • 类型转换。也许在列表声明期间,泛型类型不存在
    猜你喜欢
    • 1970-01-01
    • 2016-06-09
    • 2018-11-12
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多