Tôi có hai giao diện trong Java (phiên bản 8) rất giống nhau. Tôi không thể thay đổi giao diện và không thể thay đổi các lớp thực hiện chúng.
public interface A {
int get();
}
public interface B {
int get();
int somethingelse();
}
Bây giờ tôi có một chức năng mà việc thực hiện của nó phù hợp với cả hai giao diện (gần như). Tôi muốn nó làm một cái gì đó như thế:
public int foo((A | B) p) {
int ret = 0;
if (p instanceof B) {
ret = p.somthingelse();
}
return ret + p.get();
}
Tôi không muốn sử dụng kiểm tra vì chức năng này nằm trong hệ thống chính của chương trình của tôi. Tôi muốn nó có hiệu suất tốt. Có thể làm điều này trong Java?
Biên tập:
Một giải pháp đơn giản sẽ là sao chép / dán foo()
và thực hiện nó khác nhau cho mỗi giao diện. Nhưng trong thực tế foo()
và các giao diện dài hơn thế và tôi đang cố gắng tránh sao chép mã.
get()
điểm chung. Đây là một ví dụ đơn giản. Trong thực tế, chúng có nhiều chức năng chung.
public
accessor là dự phòng cho các phương thức giao diện. Và bạn có nghĩa là instanceof
thay vì implements
?