Can use bounded wildcard
Reports generic method parameters that can make use of bounded wildcards.
Example:
should be replaced with:
This method signature is more flexible because it accepts more types: not only Consumer<Number>
, but also Consumer<Object>
.
Likewise, type parameters in covariant position:
should be replaced with:
To quote Joshua Bloch in Effective Java third Edition:
Use the inspection options to toggle the reporting for:
invariant classes. An example of an invariant class is
java.util.List<T>
because it both accepts values (via theList.add(T)
method) and produces values (via theT List.get()
method).On the other hand,
contravariant
classes only receive values, for example,java.util.function.Consumer<T>
with the only methodaccept(T)
. Similarly,covariant
classes only produce values, for example,java.util.function.Supplier<T>
with the only methodT get()
.People often use bounded wildcards in covariant/contravariant classes but avoid wildcards in invariant classes, for example,
void process(List<? extends T> l)
. Disable this option to ignore such invariant classes and leave them rigidly typed, for example,void process(List<T> l).private
methods, which can be considered as not a part of the public APIinstance methods
Inspection options
Option | Type | Default |
---|---|---|
Report invariant classes | Checkbox | true |
Report private methods | Checkbox | true |
Report instance methods | Checkbox | true |
Inspection Details | |
---|---|
Available in: | IntelliJ IDEA 2023.3, Qodana for JVM 2023.3 |
Plugin: | Java, 233.SNAPSHOT |