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.