gpt4 book ai didi

java - 转发类示例

转载 作者:行者123 更新时间:2023-11-30 08:28:34 25 4
gpt4 key购买 nike

阅读 Effective Java , 我从 Item 16: Favor composition over inheritance 中看到了以下示例。

在下面的 InstrumentedSet 中,书中显示我们可以跟踪元素被插入的次数(通过 InstrumentedSet.addCount 变量)。

为此,我们可以简单地附加到此类对象的 addCount,然后调用 ForwardingSet.add(),它会调用实际的 Set 类的 add() 的实际实现。

// Reusable forwarding class 
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); }
...
}

// Wrapper class - uses composition in place of inheritance
public class InstrumentedSet<E> extends ForwardingSet<E> {     
private int addCount = 0;     
public InstrumentedSet(Set<E> s) { super(s); }
@Override public boolean add(E e) {         
addCount++;
return super.add(e);
}
...
}

我的理解是否正确,要使用此模式/方法,Forwarding* 类必须调用其父类的所有 方法(在本例中设置)?

最佳答案

是的,您是对的,ForwardingSet 委托(delegate)/转发它对支持集的所有调用。

您可能想看看流行库 Guava 中的工作示例:ForwardingMap .

关于java - 转发类示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20151598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com