2010-09-23 47 views

Trả lời

14

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).

+0

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) –

+0

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ý. –

0

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.

4

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.

3

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.

0

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.

Các vấn đề liên quan