gpt4 book ai didi

java - 是否有强制执行最终键的 Java Map 实现?

转载 作者:太空狗 更新时间:2023-10-29 22:46:41 25 4
gpt4 key购买 nike

我需要一个 Map,一旦一个键获得一个值,任何将值放在同一个键上的额外尝试都会抛出异常。

例如:

map.put("John", 3); //OK
map.put("John", 7); // throws some exception
map.put("John", 11); // throws some exception

当然,我可以自己实现它(例如,通过扩展 HashMap,或者用 if map.contains(key)< 包围对 put 的每次调用),但我更喜欢使用现成的东西来保持我的代码干净。

有人知道这样的实现吗?

最佳答案

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
}

否则,按照其他人的建议,如果你使用Guava,就使用ForwardingMap;这本质上是上述代码的通用版本。

事实上,确实使用了 Guava。


其他注意事项:您不能只是//throws some exception 在这里; Map.put() 未声明抛出任何异常,因此您唯一的选择是在此处抛出未经检查的异常。

关于java - 是否有强制执行最终键的 Java Map 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23990510/

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