Types being referred to by non-canonical names can be confusing. For example,
public final class Entries {
private final ImmutableList<ImmutableMap.Entry<String, Long>> entries;
public Entries(Map<String, Long> map) {
this.entries = ImmutableList.copyOf(map.entrySet());
}
}
There is nothing special about ImmutableMap.Entry
; it is precisely the same
type as Map.Entry
. This example makes it look deceptively as though
ImmutableList<ImmutableMap.Entry<?, ?>>
is an immutable type and therefore
safe to store indefinitely, when really it offers no more safety than
ImmutableList<Map.Entry<?, ?>>
. You should use ImmutableList<Map.Entry<?,
?>>
instead, so it’s obvious what type you’re referring to.
Suppress false positives by adding the suppression annotation @SuppressWarnings("NonCanonicalType")
to the enclosing element.