小编mar*_*kus的帖子

当它们作为 lambda 或方法引用传递时,如何实现可移除的侦听器?

我想知道在没有太多接口的情况下在 Java 中实现某种 observable 的好方法是什么。

我认为使用预定义的功能接口会很好。在这个例子中,我使用 aString Consumer来表示一个接受一个字符串作为通知的监听器。

class Subject {

  List<Consumer<String>> listeners = new ArrayList<>();
  
  void addListener(Consumer<String> listener) { listeners.add(listener); }

  void removeListener(Consumer<String> listener { listeners.remove(listener); }

  ...
}

class PrintListener {
  public void print(String s) { System.out.println(s); }
}

Subject subject = new ...
PrintListener printListener = new ...
subject.add(printListener); // Works, I find it in the listener list
subject.remove(printListener); // Does NOT work. I still find it in the list

Run Code Online (Sandbox Code Playgroud)

我找到了解释:

Consumer<String> a = printListener::print; …
Run Code Online (Sandbox Code Playgroud)

java design-patterns

9
推荐指数
2
解决办法
140
查看次数

标签 统计

design-patterns ×1

java ×1