【发布时间】:2015-01-31 16:57:53
【问题描述】:
包装类的缺点很少。一个警告是包装类不适合在回调框架中使用,其中对象将自引用传递给其他对象以进行后续调用(“回调”)。因为被包装的对象不知道它的包装器,所以它会传递一个对自身的引用(this)并且回调会避开包装器。
也许有人可以用一个例子来解释这意味着什么。它是用 Effective Java 编写的,但我没有完全理解它。
要添加到上下文中,而不是继承,我们应该支持导致子类化 Set 的组合,我们应该使用这样的东西:
public class ForwardingSet<E> implements Set<E> {
private final Set<E> s;
public ForwardingSet(Set<E> s) { this.s = s; }
public void clear() { s.clear(); }
public boolean contains(Object o) { return s.contains(o); }
...
}
但是,这将如何失败,我仍然无法理解回调。在 JavaScript 中,我们可以使用函数回调,但如果有人可以解释,相同的概念如何适用于 Java。
【问题讨论】:
标签: java design-patterns callback coding-style wrapper