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 of 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.