当前位置: 首页 > 面试题库 >

用Java可以观察到

东方文林
2023-03-14
问题内容

我正在尝试了解观察者和可观察者。

这是我要弄清楚的一个示例:

public class IntegerDataBag extends Observable implements Iterable<Integer> {

    private ArrayList<Integer> list= new ArrayList<Integer>();

    public void add(Integer i){
        list.add(i);
        setChanged();
        notifyObservers();
    }

    public Iterator<Integer> iterator(){
        return list.iterator();
    }

    public Integer remove (int index){
        if (index< list.size()){
            Integer i = list.remove(index);
            setChanged();
            notifyObservers();
            return i;
        }
        return null;
    }

}

public class IntegerAdder implements Observer {

    private IntegerDataBag bag;

    public IntegerAdder(IntegerDataBag bag) {
        this.bag = bag;
        bag.addObserver(this);
    }

    public void update(Observable o, Object arg) {
        if (o == bag) {
            System.out.println("The contents of the IntegerDataBag have changed");
        }
    }

}
  1. bag.addObserver()可制成只是因为IntegerDataBag延伸Observable

  2. 该观察者被添加到哪里?正在创建什么,在哪里创建?

  3. setChanged()和之间有什么区别notifyObservers()

  4. 我不明白这种update方法。代表什么arg?为什么需要检查o==bag?为什么要更新另一个可观察的东西?

  5. 无论如何我为什么需要这个观察者?


问题答案:
  1. 是。addObserverObservable抽象类中的方法。请参阅Java文档中的Observable。
  2. 它已添加到中的列表中Observable
  3. 在设置notifyObservers之前,对的调用将无济于事setChanged
  4. 您可能在同一应用程序中有多个Observable。
  5. Observer是一种常见的设计模式。通常的示例是当您有一个模型和多个视图时。每个视图都是模型上的观察者;如果模型更改,则视图将更新。


 类似资料:
  • 问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首

  • 有人能向我解释一下为什么运算符可以接受返回或的函数吗? 官方文件说: FlatMap运算符通过将您指定的函数应用于源可观察对象发出的每个项目来转换可观察对象,其中该函数返回本身发出项目的可观察对象。 为什么它也可以返回数组? 例如,它们都是有效的: 但这不起作用:

  • 是否有一种设计模式可以形成一个“复合”观察者/可观察者? 我的意思是我有一个可观察的,它在某个变化时通知它的监听器。 每个监听器也是一个可观察的,并通知它自己的监听器(在某个动作上,它做了哪个动作是由第一个可观察的通知触发的)。 这种观察者/可观察的“链接”作为设计是可以的,还是有一个标准的模式?

  • 我有以下资料: > AJava类:ClassA实现观察者 Java接口:Inter(扩展可观察,不可能) Java类:ClassB实现可观察的内部扩展 Java类:ClassC实现可观察的内部扩展 现在ClassA的代码有点像这样。 现在,如果一个特定的事件发生在ClassB或ClassC中,我希望ClassA知道它。我想过使用观察者/可观察的,但问题是接口不能扩展可观察的。 如果有人理解这个问题

  • 我正在尝试开发我的第一个RxJava例子 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅一个可观察量,该可观察量假定正在观察整数。第三个按钮将整数的值减小 1。 这是我的密码 和班级 当我尝试使用 订阅时,它只是给了我 的值(即 6),然后它给了我完成! 然后我尝试使用,认为我需要使用,只是而不是,但后来我得到了一个返回的空的,然后再次完成! 有人能帮助我从

  • 导览 本小节主要介绍 Apache ShardingSphere 可观察性的相关功能 应用性能监控集成