Why keySet() in ConcurrentHashMap returns KeySetView<K,V> and not just Set (since Java SE8)?
ConcurrentHashMap.KeySetView<K,V> keySet()
KeySetView - A view of a ConcurrentHashMap as a Set of keys, in which additions may optionally be enabled by mapping to a common value.
But keySet() does not enable "mapping to a common value" (unlike keySet(V mappedValue)) so I don't see any sense in making it KeySetView<K,V> - boolean add(K e) and boolean addAll(Collection<? extends K> c) methods would always throw UnsupportedOperationException here.
P.S. I know that KeySetView<K,V> extends (is-a) Set<K>. So I can use Set interface as usual.
I also understand that keySet() is free to return whatever class it likes to the Set interface (and we shall not care), but in ConcurrenthashMap that return class is explicitly documented - seemingly for some useful purpose.
Maybe the only use-case here is that KeySetView<K,V> gives access to the backing map:
ConcurrentHashMap<K,V> getMap()