@Override public V get(Object key) { return copyIfRequired(map.get(key)); }
@Override public V remove(Object key) { return copyIfRequired(map.remove(key)); }
@Override public Set<K> keySet() { Set<K> keys = new HashSet<>(map.size()); for (K k : map.keySet()) { keys.add(copyIfRequired(k)); } return keys; }
@Override public Collection<V> values() { List<V> values = new ArrayList<>(map.size()); for (V v : map.values()) { values.add(copyIfRequired(v)); } return values; }
@Override public V getOrDefault(Object key, V defaultValue) { return copyIfRequired(map.getOrDefault(key, defaultValue)); }
@Override public V putIfAbsent(K key, V value) { checkType(key); checkType(value); return copyIfRequired(map.putIfAbsent(key, value)); }
@Override public V replace(K key, V value) { checkType(key); checkType(value); return copyIfRequired(map.replace(key, value)); }
@Override public V remove(Object key) { return copyIfRequired(map.remove(key)); }
@Override public V get(Object key) { return copyIfRequired(map.get(key)); }
@Override public Set<K> keySet() { Set<K> keys = new HashSet<>(map.size()); for (K k : map.keySet()) { keys.add(copyIfRequired(k)); } return keys; }
@Override public Collection<V> values() { List<V> values = new ArrayList<>(map.size()); for (V v : map.values()) { values.add(copyIfRequired(v)); } return values; }
@Override public V getOrDefault(Object key, V defaultValue) { return copyIfRequired(map.getOrDefault(key, defaultValue)); }
@Override public V replace(K key, V value) { checkType(key); checkType(value); return copyIfRequired(map.replace(key, value)); }
@Override public V putIfAbsent(K key, V value) { checkType(key); checkType(value); return copyIfRequired(map.putIfAbsent(key, value)); }