MutableMethodReturnType
Method return type should use the immutable type (such as ImmutableList) instead of the general collection interface type (such as List)

Category
Severity
WARNING
Maturity

The problem

For method return type, you should use the immutable type (such as ImmutableList) instead of the general collection interface type (such as List). This communicates to your callers important semantic guarantees.

This is consistent with Effective Java Item 52, which says to refer to objects by their interfaces. Guava’s immutable collection classes offer meaningful behavioral guarantees – they are not merely a specific implementation as in the case of, say, ArrayList. They should be treated as interfaces in every important sense of the word.

That is, prefer this:

```java {.good} ImmutableList getCoutries() { return ImmutableList.of("Denmark", "Norway", "Sweden"); }


to this:

```java {.bad}
List<String> getCoutries() {
  return ImmutableList.of("Denmark", "Norway", "Sweden");
}

TIP: Using the immutable type for the method return type allows Error Prone to prevent accidental attempts to modify the collection at compile-time (see ImmutableModification).

Suppression

Suppress false positives by adding an @SuppressWarnings("MutableMethodReturnType") annotation to the enclosing element.