tôi sẽ tạo ra một phần mở rộng của giao diện của bạn cho chỉ các lớp học cần những phương pháp thêm ...
public interface BaseInterface {
public int exampleMethod();
}
public interface ExtendedInterface extends BaseInterface {
public int anotherMethod();
}
Các hàng ngàn lớp học đã thực hiện BaseInterface
. Đối với các lớp cần phương thức bổ sung, bạn thay đổi chúng để triển khai ExtendedInterface
.
Nếu đối tượng của bạn được lưu trữ trong bộ sưu tập chẳng hạn như một mảng BaseInterface[]
, điều này vẫn hoạt động vì các đối tượng thuộc loại ExtendedInterface
cũng là đối tượng thuộc loại BaseInterface
, vì vậy chúng vẫn có thể được lưu trữ trong cùng một bộ sưu tập chung.
Ví dụ, đây là vẫn hoàn toàn hợp lệ ...
BaseInterface[] objects = new BaseInterface[2];
objects[0] = new ClassThatImplementsBaseInterface();
objects[1] = new ClassThatImplementsExtendedInterface();
Tuy nhiên, nếu bạn cần truy cập vào phương pháp mới của ExtendedInterface
, nhưng đối tượng được lưu trữ trong một bộ sưu tập BaseInterface
, bạn sẽ cần để đúc nó vào một ExtendedInterface
trước khi bạn có thể sử dụng nó ...
BaseInterface[] objects = new BaseInterface[1];
objects[0] = new ClassThatImplementsExtendedInterface();
if (objects[0] instanceof ExtendedInterface){
// it is an ExtendedInterface, so we can call the method after we cast it
((ExtendedInterface)objects[0]).anotherMethod();
}
else {
// it is a BaseInterface, and not an ExtendedInterface
}
Điều này có thể hoặc không phù hợp, tùy thuộc vào mức sử dụng của bạn.
Nếu bạn thực sự cần tất cả hàng nghìn đối tượng để thực hiện phương pháp mới, bạn sẽ phải thêm phương thức vào BaseInterface
và sau đó sử dụng tính năng của IDE hoặc trình soạn thảo văn bản để thực hiện phương pháp trong tất cả các lớp của bạn. Ví dụ: bạn có thể mở tất cả trong trình chỉnh sửa văn bản và thực hiện tìm kiếm thay thế cho tìm điều gì đó phổ biến đối với mỗi lớp và thay thế bằng mã chung + mã mặc định cho phương pháp mới. Khá nhanh và không đau. Tôi chắc chắn rằng một số IDE có lẽ cũng sẽ tự động thêm khai báo phương thức cho tất cả các lớp kế thừa, hoặc ít nhất có một tùy chọn để làm điều này trong một menu chuột phải.
Thay đổi giao diện thành lớp trừu tượng và cung cấp triển khai cơ sở? –
Bạn có hàng ngàn lớp học? Wow. –
@verisimilitude Chẳng phải giải pháp đó sẽ sớm tạo ra một cơn ác mộng bảo trì và giới thiệu rất nhiều giao diện cho hệ thống? – Thihara