Когда следует и не следует использовать instanceof?

Я просмотрел различные статьи, но до сих пор не знаю, почему нельзя использовать instanceof. Пожалуйста, дайте мне знать ваши мысли.

Ответ 1

Мне нужно использовать подсказки instanceof при плохом дизайне. Это верный признак того, что будет построена большая сложная конструкция в стиле переключателя. В большинстве случаев, когда я вижу, что он используется, мы должны использовать полиморфизм, а не instanceof. См. Шаблон стратегии. (соответствующие примеры использования)

Единственный раз, когда я нахожу, что мне нужно использовать его, при реализации equals(Object o).

Ответ 2

Один хороший пример использования - проверка интерфейсов маркеров, таких как RandomAccess.

Ответ 3

Приведение из базового типа к производному типу - плохая вещь. Если вы используете instandof таким образом, это считается плохим дизайном, потому что трудно поддерживать и читать. Смотрите http://www.javapractices.com/topic/TopicAction.do?Id=31.

Использование instanceof для equals(), потому что у вас есть object, который должен быть вашим типом, это хорошая практика.

Ответ 4

Когда вы знаете передаваемый объект, вам не нужно его использовать. Если есть какая-либо неоднозначность (например, два класса, реализующие один и тот же интерфейс), рекомендуется использовать instanceof, прежде чем продолжить.

Ответ 5

Использование instanceof при переопределении метода Object equals необходимо, поскольку два объекта не могут быть равными, если они имеют разные типы. Я редко сталкиваюсь с другой ситуацией, когда требуется instanceof - возможно, если требуется downcasting, но может возникнуть исключение ClassCastException.