Khi phương pháp tái cấu trúc, rất dễ dàng để giới thiệu tính không tương thích nhị phân (với các phiên bản trước của mã) trong Java.Phương pháp được tái cấu trúc và khả năng tương thích nhị phân trong Java
xem xét thay đổi một phương pháp để mở rộng các loại hình tham số của mình cho một giao diện cha mẹ:
void doSomething(String x);
// change it to
void doSomething(CharSequence c);
Tất cả các mã có sử dụng phương pháp này sẽ tiếp tục biên dịch mà không thay đổi, nhưng nó đòi hỏi một tái biên dịch (vì các tệp nhị phân cũ sẽ thất bại với MethodNotFoundError).
Cách kéo phương thức vào lớp cha. Điều này đòi hỏi phải biên dịch lại?
// before
public class B extends A{
protected void x(){};
}
// after
public class A {
public void x(){};
}
public class B extends A{}
Phương pháp đã được chuyển từ B sang cha mẹ A. Nó cũng đã thay đổi mức độ hiển thị từ bảo vệ thành công cộng (nhưng đó không phải là vấn đề).
Tôi có cần duy trì "trình bao bọc khả năng tương thích nhị phân" trong B hay nó sẽ tiếp tục hoạt động (tự động gửi đến lớp cha)?
// do I need this ?
public class B extends A{
// binary compatibility wrapper
public void x(){ super.x(); }
}
Tôi nghĩ điều tương tự về các phương pháp mở rộng ... Điều đó không có tác dụng vì tên lớp của đối số trở thành một phần của tên phương thức nội bộ. Tôi tự hỏi, nếu điều tương tự cũng đúng với tên của lớp mà trình biên dịch nghĩ là khai báo phương thức. – Thilo
"Mở rộng" ảnh hưởng đến chữ ký của phương thức, nhưng việc di chuyển phương thức đến một siêu lớp thì không. Hãy thử nó trên dòng lệnh. –
@ bkail: làm cho câu trả lời đó, để tôi có thể bỏ phiếu. – Thilo