Checks that the order of modifiers conforms to the suggestions in the Java Language specification, sections 8.1.1, 8.3.1, 8.4.3 and 9.4. The correct order is:
public
protected
private
abstract
default
static
final
transient
volatile
synchronized
native
strictfp
ATTENTION: We skip type annotations from validation.
To configure the check:
All messages can be customized if the default message doesn't suit you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.modifier
Checks for redundant modifiers in:
interface
declarations that are declared
as static
.
enum
definitions that are declared
as static
.
Rationale: The Java Language Specification strongly
discourages the usage of public
and abstract
for method
declarations in interface definitions as a matter of style.
Interfaces by definition are abstract so the abstract
modifier on the interface is redundant.
Classes inside of interfaces by definition are public and static,
so the public
and static
modifiers
on the inner classes are redundant. On the other hand, classes
inside of interfaces can be abstract or non abstract.
So, abstract
modifier is allowed.
Fields in interfaces and annotations are automatically public, static and final, so these modifiers are redundant as well.
As annotations are a form of interface, their fields are also automatically public, static and final just as their annotation fields are automatically public and abstract.
Enums by definition are static implicit subclasses of java.lang.Enum<E>.
So, the static
modifier on the enums is redundant. In addition,
if enum is inside of interface, public
modifier is also redundant.
Enums can also contain abstract methods and methods which can be overridden by the declared enumeration fields. See the following example:
Since these methods can be overridden in these situations, the final methods are not marked as redundant even though they can't be extended by other classes/enums.
Nested enum
types are always static by default.
Final classes by definition cannot be extended so the final
modifier on the method of a final class is redundant.
Public modifier for constructors in non-public non-protected classes is always obsolete:
There is no violation in the following example, because removing public modifier from ProtectedInnerClass constructor will make this code not compiling:
name | description | type | default value |
---|---|---|---|
tokens | tokens to check | subset of tokens METHOD_DEF, VARIABLE_DEF, ANNOTATION_FIELD_DEF, INTERFACE_DEF, CTOR_DEF, CLASS_DEF, ENUM_DEF, RESOURCE. | METHOD_DEF, VARIABLE_DEF, ANNOTATION_FIELD_DEF, INTERFACE_DEF, CTOR_DEF, CLASS_DEF, ENUM_DEF, RESOURCE. |
To configure the check:
To configure the check to check only methods and not variables:
All messages can be customized if the default message doesn't suit you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.modifier