guava/src/com/google/common/collect/Multimaps.java
public static <K, V> Multimap<K, V> unmodifiableMultimap(Multimap<K, V> delegate) {
    if (delegate instanceof UnmodifiableMultimap || delegate instanceof ImmutableMultimap) {
      return delegate;
    }
    return new UnmodifiableMultimap<>(delegate);
  }
public static <K, V> Multimap<K, V> unmodifiableMultimap(Multimap<K, V> delegate) {
    if (delegate instanceof UnmodifiableMultimap || delegate instanceof ImmutableMultimap) {
      return delegate;
    }
    return new UnmodifiableMultimap<>(delegate);
  }
public static < K , V > Multimap < K , V > unmodifiableMultimap ( Multimap < K , V > delegate ) { if ( delegate instanceof UnmodifiableMultimap || delegate instanceof ImmutableMultimap ) { return delegate ; } return new UnmodifiableMultimap <> ( delegate ) ; }
Returns an unmodifiable view of the specified multimap. Query operations on the returned
multimap "read through" to the specified multimap, and attempts to modify the returned
multimap, either directly or through the multimap's views, result in an {@code
UnsupportedOperationException}.

<p>The returned multimap will be serializable if the specified multimap is serializable.

@param delegate the multimap for which an unmodifiable view is to be returned
@return an unmodifiable view of the specified multimap
Returns an unmodifiable view of the specified multimap . Query operations on the returned multimap read through to the specified multimap and attempts to modify the returned multimap either directly or through the multimap s views result in an { @code UnsupportedOperationException } .