Я просмотрел различные статьи, но я до сих пор не знаю, почему instanceof не должен использоваться.kindlylet мне знать ваши мысли., когда мы должны использовать instanceof, а когда нет
ответ
Мне нужно использовать подсказки instanceof при плохом дизайне. Это верный признак того, что будет построена большая сложная конструкция в стиле переключателя. В большинстве случаев, когда я вижу, что он используется, мы должны использовать полиморфизм, а не instanceof. См. Шаблон стратегии. (relevant examples of use)
Единственный раз, когда я нахожу, мне нужно использовать его при внедрении equals(Object o)
.
Когда вы знаете передаваемый объект, вам не нужно его использовать. Если есть какая-либо неоднозначность (например, два класса, реализующие один и тот же интерфейс), то рекомендуется продолжить использование instanceof
.
Кастинг от базового типа до производного типа - это плохая вещь. Если вы используете instandof таким образом, это считается плохим дизайном, потому что его трудно поддерживать и читать. См. http://www.javapractices.com/topic/TopicAction.do?Id=31.
Использование instanceof
для equals(), поскольку у вас есть object
, который должен быть вашим типом, это хорошая практика.
Один хороший пример использования будет проверять интерфейсы маркеров, такие как RandomAccess.
Использование instanceof при переопределении метода equals объекта необходимо, поскольку два объекта не могут быть равными, если они имеют разные типы. Я редко сталкиваюсь с другой ситуацией, когда требуется экземпляр - возможно, если требуется downcasting, но может возникнуть исключение ClassCastException.
- 1. Когда мы должны использовать класс, а когда мы не должны
- 2. Когда мы должны использовать *, &,. , ->?
- 3. Когда мы должны использовать RTLD_DEEPBIND?
- 4. Когда мы должны использовать ListCollectionView?
- 5. Когда мы должны использовать SignalR самостоятельно, а когда мы не должны?
- 6. Когда можно использовать Javascript, а когда нет?
- 7. , когда мы должны называть base.OnPaint() когда мы
- 8. Когда мы должны использовать std :: enable_shared_from_this
- 9. Когда мы должны использовать Looper в Android?
- 10. Когда мы должны использовать мьютекс и когда следует использовать семафор
- 11. SPL против массива: когда мы должны использовать SPL и когда мы должны использовать Array в PHP?
- 12. Java: когда мы должны использовать методы инкубационных
- 13. Когда мы должны использовать событие в C#
- 14. Когда использовать машину epsilon, а когда нет?
- 15. Ruby: Когда использовать себя, а когда нет?
- 16. Application.DoEvents, когда это необходимо, а когда нет?
- 17. Когда мы должны использовать курсор sql
- 18. Когда мы должны использовать PreparedStatement вместо Statement?
- 19. Когда мы должны использовать Mockery vs JUnit4Mockery?
- 20. Когда мы должны использовать компонент Vue.js
- 21. Когда мы должны использовать оператор '===' в javascript?
- 22. Когда мы должны использовать `` или '' в mySQL?
- 23. Когда мы должны использовать ref и out
- 24. Когда мы должны использовать <!-- ko -->
- 25. Когда мы должны использовать split() в Python?
- 26. Когда мы должны использовать коллекцию JB Backbone?
- 27. Git, поэтому, когда мы должны использовать rebase?
- 28. Когда мы ставим кавычки в выражениях R, а когда нет?
- 29. Когда мы должны закрыть EntityManagerFactory?
- 30. Когда правильно использовать вложенные контроллеры в AngularJS, а когда нет?
На самом деле, стратегия должна решить, что должно быть сделано в соответствии с известными критериями (например, тип), но для отправки неизвестных типов на разные ветви кода с использованием полиморфизма используется шаблон [Посетитель] (http: // en .wikipedia.org/wiki/Visitor_pattern) –
IMO instanceof лучше, чем полиморфизм - это ситуации особого случая, когда метод имеет смысл только в одном подклассе, а родительский класс и/или другие подклассы будут вынуждены внедрять методы заглушки, которые не имеют смысла в их контексте. Даже тогда следует попытаться вызвать метод специального случая из унаследованного метода, но если это громоздко, то использование instanceof совершенно оправдано. –