Я просмотрел различные статьи, но до сих пор не знаю, почему нельзя использовать 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.