He revisado varios artículos, pero aún no sé por qué no debo usarlo. Mucho me gustaría saber qué piensa.cuándo deberíamos usar instanceof y cuándo no
Respuesta
Encuentro una necesidad de utilizar ejemplos de consejos sobre el mal diseño. Es una señal segura de que se seguirá una gran y compleja construcción estilo interruptor. La mayoría de las veces que lo veo utilizado, debemos usar el polimorfismo en lugar de instanceof. Ver el patrón de Estrategia. (relevant examples of use)
La única vez que encuentro que necesito usarlo es cuando implemento equals(Object o)
.
Cuando conozca el objeto que se está pasando, no necesita usarlo. Si hay alguna ambigüedad involucrada (como dos clases que implementan la misma interfaz), se aconseja utilizar instanceof
antes de seguir adelante.
Lanzar desde un tipo base a un tipo derivado es algo malo. Si usa instandofil de esa manera, se considera un mal diseño porque es difícil de mantener y leer. Ver http://www.javapractices.com/topic/TopicAction.do?Id=31.
Usando instanceof
para iguales() porque tiene un object
que debería ser su tipo, es una buena práctica.
Un buen caso de uso sería verificar interfaces de marcador como RandomAccess.
Usar instanceof al anular el método de Object es igual, ya que dos objetos no pueden ser iguales si son de tipos diferentes. Rara vez me encuentro con otra situación en la que se requiere instanceof, tal vez si se requiere downcasting pero se puede lanzar una ClassCastException.
- 1. Cuándo deberíamos usar mutex y cuándo deberíamos usar el semáforo
- 2. Cuándo deberíamos usar la clase y cuándo no debemos
- 3. Cuándo usar Class.isInstance() y cuándo usar el operador instanceof?
- 4. ¿Cuándo deberíamos usar scala.util.DynamicVariable?
- 5. ¿Cuándo deberíamos usar Radix sort?
- 6. ¿Cuándo usar == y cuándo usarlo?
- 7. ¿Cuándo deberíamos usar Mockery vs JUnit4Mockery?
- 8. Cuándo usar OSGi EventAdmin y cuándo no?
- 9. Cuándo usar Restringir y cuándo no a
- 10. Cuándo usar GWT y cuándo no
- 11. ¿Cuándo deberíamos cerrar EntityManagerFactory?
- 12. SPL vs. Array: ¿Cuándo deberíamos usar SPL y cuándo debemos usar Array en PHP?
- 13. Application.DoEvents, ¿cuándo es necesario y cuándo no?
- 14. ¿Cuándo está bien usar Javascript y cuándo no?
- 15. ¿Cuándo y por qué deberíamos usar la clase System.ComponentModel.Container?
- 16. Cuándo usar Pepino y cuándo usar RSpec?
- 17. Cuándo usar undef_method, y cuándo usar remove_method?
- 18. Cuándo usar y cuándo no usar Try Catch Finally
- 19. cuándo usar Tarea y cuándo usar Subproceso?
- 20. Cuándo usar categorías y cuándo usar subclases?
- 21. Cuándo usar señales y ranuras y cuándo no a
- 22. ¿Cuándo debería usar "use" y cuándo "require" y cuándo "AUTOLOAD" en perl [buena práctica de programación]?
- 23. ¿Cuándo debería usar TCP_NODELAY y cuándo TCP_CORK?
- 24. Cuándo usar, no usar, OneToOne y ManyToOne
- 25. ¿Cuándo debería usar Silverlight y cuándo XNA?
- 26. Cuándo usar .mdf y cuándo .sdf?
- 27. Cuándo usar `zipmap` y cuándo` map vector`?
- 28. Cuándo usar los servicios de datos WCF y cuándo no?
- 29. ¿Cuándo es apropiado usar una asociación bidireccional y cuándo no?
- 30. Cuándo usar "nuevo" y cuándo no hacerlo, en C++?
En realidad, Strategy consiste en decidir qué se debe hacer según un criterio conocido (como el tipo, por ejemplo) pero enviar tipos desconocidos en diferentes ramas de código usando polimorfismo, el patrón utilizado es [Visitor] (http: // es .wikipedia.org/wiki/Visitor_pattern) –
IMO instanceof es mejor que el polimorfismo en situaciones de casos especiales donde un método tiene sentido en una sola subclase, y la clase padre y/u otras subclases se verían obligadas a implementar métodos stub que no tienen sentido en su contexto. Incluso entonces, uno debe tratar de llamar al método de caso especial de un método heredado, pero si eso es engorroso, entonces el uso de instanceof está perfectamente justificado. –