在您周围创建一个装饰器HashBiMap
以进行验证。
Guava 推广了Forwarding*
助手类的概念,以简化大多数集合类型的装饰器模式。
通过子类ForwardingXXX
化和实现该delegate()
方法,您可以仅覆盖目标类中选定的方法,添加装饰功能,而无需自己委托每个方法。
但出于某种原因,作者还没有为我们提供ForwardingBiMap
。所以我会自己创建(一个基本的)一个,或者等待关于失踪的问题ForwardingBiMap
得到解决。如果您想创建自己的,只需执行以下操作:
public abstract class ForwardingBiMap<K,V> implements BiMap<K,V> {
protected abstract BiMap<K,V> delegate();
// implement *all* other methods with the following pattern:
// ReturnType method(ParamType param) {
// return delegate().method(param);
// }
}
然后实施您的验证:
public static <K,V> BiMap<K, V> validating(BiMap<K,V> delegate) {
Objects.requireNonNull(delegate);
return new ForwardingBiMap<K,V>() {
@Override protected BiMap<K,V> delegate() { return delegate; }
@Override public V getOrDefault(Object key, V defaultValue) {
// Implement your own validation here
return super.getOrDefault(key, defaultValue);
}
};
}
然后最后使用它:
BiMap<String,String> backingBiMap = HashBiMap.create();
BiMap<String,String> validatingBiMap = ValidatingBiMap.validating(backingBiMap);
validatingBiMap.getOrDefault("Hello", "World");