JDK 中没有这样的实现。您最好的选择是使用组合:
public final class CustomMap<K, V>
implements Map<K, V>
{
private final Map<K, V> delegate;
public CustomMap(final Map<K, V> delegate)
{
this.delegate = delegate;
}
@Override
public V put(final K key, final V value)
{
// Can't use the return value of delegate.put(), since some implementations
// allow null values; so checking delegate.put() == null doesn't work
if (delegate.containsKey(key))
throw new IllegalArgumentException("duplicate key: " + key);
return delegate.put(key, value);
}
@Override
public void putAll(@Nonnull final Map<? extends K, ? extends V> m)
{
for (final Entry<? extends K, ? extends V> entry: m.entrySet())
put(entry.getKey(), entry.getValue());
}
// delegate all other methods
}
否则,正如其他人建议的那样,如果您使用番石榴,请使用ForwardingMap;这本质上是上述代码的通用版本。
事实上,一定要使用番石榴。
其他注意事项:你不能只是在这里;的 不会声明引发任何异常,因此您唯一的选择就是在此处引发未经检查的异常。// throws some exception
Map
.put()