Chain of 'instanceof' checks
Reports any chains of if
-else
statements all of whose conditions are instanceof
expressions or class equality expressions (e.g. comparison with String.class
). Such constructions usually indicate a failure in object-oriented design which dictates that such type-based dispatch should be done via polymorphic method calls rather than explicit chains of type tests.
Example:
double getArea(Shape shape) {
// Warning: abstraction failure.
// It would be better to declare a getArea()
// abstract method in the shape interface
// and implement it in every inheritor.
if (shape instanceof Point) {
return 0;
}
if (shape instanceof Circle) {
return Math.PI *
Math.pow(((Circle) shape).radius(), 2);
}
if (shape instanceof Rectangle) {
return ((Rectangle) shape).width() *
((Rectangle) shape).height();
}
throw new IllegalArgumentException();
}
Use the checkbox below to ignore instanceof
expressions on library classes.
Inspection options
Option | Type | Default |
---|---|---|
Ignore instanceof on library classes | Checkbox | false |
Inspection Details | |
---|---|
Available in: | IntelliJ IDEA 2023.3, Qodana for JVM 2023.3 |
Plugin: | Java, 233.SNAPSHOT |
Last modified: 13 July 2023