Tôi có một danh sách các đối tượng mở rộng từ một lớp cơ sở. Bây giờ tôi muốn áp dụng một hoạt động cụ thể chỉ trên một thể hiện của các lớp trong danh sách.Ví dụ là một thực hành tốt?
Việc sử dụng instanceof
có thực hành tốt ở đó không? Hoặc tôi có nên thay đổi các đối tượng khác nhau không, ví dụ: tùy chỉnh enum
?
abstract class Base;
class Foo extends Base;
class Bar extends Base;
List<Base> bases;
for (Base base : bases) {
if (base instanceof Bar.class) {
//execute my custom operation on the base object
doSomething((Bar) base);
}
}
Nếu cách tiếp cận đó không tốt đẹp nói chung, làm cách nào tôi có thể làm tốt hơn?
Sử dụng đa hình; đó là lý do tại sao nó tồn tại. –
chính xác - thay vì doSomething (base) - bạn nên thực hiện một số base.doSomething(), được ghi đè trong foo.doSomething(). Google đa hình java - hoặc - ghi đè lên phương thức java. –
Tôi thích câu trả lời cụ thể này: http://www.javapractices.com/topic/TopicAction.do?Id=31. Tôi nhận ra C++ và Java là khác nhau nhưng ** "Bất cứ lúc nào bạn thấy mình viết mã của biểu mẫu" nếu đối tượng thuộc loại T1, sau đó làm điều gì đó, nhưng nếu nó thuộc loại T2, thì hãy làm gì đó khác, "tát bản thân. * * – thang