Inspectopedia Help

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