когда мы должны использовать instanceof, а когда нет - PullRequest
12 голосов
/ 23 сентября 2010

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

Ответы [ 5 ]

15 голосов
/ 23 сентября 2010

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

Единственное, что мне нужно, это использовать при реализации equals(Object o).

4 голосов
/ 23 сентября 2010

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

4 голосов
/ 23 сентября 2010

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

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

0 голосов
/ 23 сентября 2010

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

0 голосов
/ 23 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...