Tôi đã trải qua nhiều bài viết khác nhau, nhưng tôi vẫn không biết tại sao instanceof không nên sử dụng.kindlycho tôi biết suy nghĩ của bạn.khi nào chúng ta nên sử dụng instanceof và khi không phải
Trả lời
Tôi thấy cần phải sử dụng các gợi ý của ví dụ ở thiết kế kém. Đó là một dấu hiệu chắc chắn rằng một cấu trúc chuyển đổi kiểu phức tạp lớn sẽ theo sau. Hầu hết các lần khác tôi thấy nó được sử dụng, chúng ta nên sử dụng đa hình hơn là instanceof. Xem mẫu Chiến lược. (relevant examples of use)
Lần duy nhất tôi tìm thấy tôi cần sử dụng nó là khi triển khai equals(Object o)
.
Khi bạn biết đối tượng được truyền thì bạn không cần sử dụng nó. Nếu có bất kỳ sự mơ hồ nào liên quan (như hai lớp thực hiện cùng một giao diện) thì bạn nên sử dụng instanceof
trước khi tiếp tục.
Truyền từ loại cơ sở sang loại có nguồn gốc là điều xấu. Nếu bạn sử dụng instandof theo cách đó, nó được coi là thiết kế tồi vì khó duy trì và đọc. Xem http://www.javapractices.com/topic/TopicAction.do?Id=31.
Sử dụng instanceof
cho bằng() vì bạn có object
nên là loại của bạn, đó là thực hành tốt.
Một trường hợp sử dụng tốt sẽ kiểm tra các giao diện điểm đánh dấu như RandomAccess.
Sử dụng instanceof khi ghi đè phương trình equals của đối tượng là cần thiết, khi thấy hai đối tượng không thể bằng nhau nếu chúng thuộc loại khác nhau. Tôi hiếm khi đi qua một tình huống khác mà instanceof là bắt buộc - có lẽ nếu downcasting là bắt buộc nhưng một ClassCastException có thể bị ném.
- 1. Khi nào chúng ta nên sử dụng lớp học và khi chúng ta không nên
- 2. Khi nào chúng ta nên sử dụng mutex và khi nào chúng ta nên sử dụng semaphore
- 3. Khi nào chúng ta nên đóng EntityManagerFactory?
- 4. Khi nào nên sử dụng Class.isInstance() và khi nào thì sử dụng toán tử instanceof?
- 5. Tại sao chúng ta nên sử dụng mã hóa ui khi chúng ta có Specflow?
- 6. Khi nào chúng ta sử dụng ANTLR
- 7. Chúng ta có nên đóng HttpPostedFile.Inputstream, khi chúng ta đã hoàn thành việc sử dụng nó?
- 8. Khi nào và tại sao chúng ta nên sử dụng lớp System.ComponentModel.Container?
- 9. Khi nào chúng ta phải sử dụng các toán tử ngầm và rõ ràng trong C#?
- 10. MVC: tại sao chúng ta cần "điều khiển", hoặc khi nào chúng ta nên sử dụng mẫu này?
- 11. Khi nào chúng ta nên xem xét sử dụng riêng tư hoặc được bảo vệ?
- 12. Lịch add() vs roll() khi nào chúng ta sử dụng?
- 13. Khi nào chúng ta sẽ sử dụng applicationContext.xml trong Spring?
- 14. Tại sao nên sử dụng id khi chúng ta có thể sử dụng NSObject?
- 15. httpmodules httphandlers, sử dụng lý tưởng chúng là gì? khi nào nên sử dụng và khi nào không sử dụng?
- 16. Khi chúng ta phải sử dụng DBNull.Value, null và "" trong C# .Net?
- 17. Khi nào, nếu bao giờ, chúng ta nên sử dụng const?
- 18. Khi nào chúng ta nên sử dụng biến cuối cùng tĩnh chưa được khởi tạo?
- 19. Chúng ta có nên sử dụng ScalaSignature trực tiếp không?
- 20. Khi nào chúng ta phải sử dụng NVARCHAR/NCHAR thay vì VARCHAR/CHAR trong SQL Server?
- 21. Khi nào chúng ta sử dụng mô-đun ruby và sử dụng thành phần lớp học?
- 22. tại sao chúng ta không nên sử dụng ++ trong javascript?
- 23. Khi nào chúng ta phải sử dụng từ khóa bí danh bên ngoài trong C#?
- 24. Khi nào chúng ta phải sử dụng toán tử đã chọn trong C#?
- 25. Khi nào bạn nên sử dụng JCR và khi nào bạn nên sử dụng JPA/RDBMS?
- 26. khi nào chúng ta cần mẫu Adapter?
- 27. Chúng ta có cần mfence khi sử dụng xchg
- 28. Ext.namespace là gì, chúng ta nên sử dụng chúng như thế nào?
- 29. Khi nào nên sử dụng hệ thống() và khi nào nên sử dụng execv *()?
- 30. Khi nào tôi nên sử dụng require() và khi nào nên sử dụng define()?
Thực ra, Chiến lược là quyết định những gì nên được thực hiện theo một tiêu chí đã biết (như loại ví dụ) nhưng để gửi các loại không xác định trên các nhánh mã khác nhau sử dụng đa hình, mẫu được sử dụng là [Visitor] (http: // vi .wikipedia.org/wiki/Visitor_pattern) –
IMO instanceof tốt hơn so với đa hình là trường hợp đặc biệt trong đó một phương thức có ý nghĩa chỉ trong một lớp con và lớp cha và/hoặc các lớp con khác sẽ buộc phải triển khai các phương thức sơ khai không có nghĩa trong bối cảnh của họ. Thậm chí sau đó, người ta nên cố gắng gọi phương thức đặc biệt từ một phương pháp kế thừa, nhưng nếu đó là cồng kềnh thì sử dụng instanceof là hoàn toàn hợp lý. –