Tính tương thích chủ yếu hoạt động. Tôi sẽ không mong đợi bất kỳ vấn đề nào cho bạn phát sinh ngoài một số cảnh báo khác nhau cho ví dụ: không sử dụng Generics. Có thể một số API được sử dụng hầu như không được chấp nhận, nhưng tôi cho rằng chúng đã được đặt đúng vị trí, chỉ được đánh dấu là không dùng nữa.
Chỉ cần dùng thử, nếu nó biên dịch bạn nên vẫn ổn.
Một khía cạnh thiết kế quan trọng của Java - thật không may - là khả năng tương thích ngược hoàn toàn.
Có rất ít ngoại lệ trong đó khả năng tương thích ngược không được bảo toàn; nổi bật nhất của Eclipse là khi thuật toán sắp xếp được thay đổi từ một thuật toán ổn định thành một thuật toán sắp xếp không ổn định (thứ tự của các đối tượng phân loại giống hệt nhau không còn được bảo tồn); nhưng đó không bao giờ là một phần của đặc tả Java, nhưng là một lỗi trong Eclipse.
Thật không may, bởi vì có một vài lựa chọn không tốt mà bây giờ không thể thay đổi. Iterator
không được có chức năng remove()
trong API, Vector
không được đồng bộ hóa (được giải quyết bằng cách có ArrayList
bây giờ), StringBuffer
không được đồng bộ hóa, do đó StringBuilder
. String
có lẽ phải là một giao diện, không phải là một lớp, để cho phép, ví dụ: Chuỗi 8 bit, chuỗi 32 bit - CharSequence
là giao diện chuỗi tốt hơn, nhưng có quá nhiều phương thức không chấp nhận CharSequence
và yêu cầu trả lại String
. Observable
cũng là một giao diện: bạn không thể tạo một phân lớp có thể quan sát được với API này. Đến tên một vài. Nhưng vì khả năng tương thích ngược, chúng không thể được cố định nữa cho đến khi có thể mô đun hóa JDK (tại thời điểm đó một số có thể ít nhất biến mất thành một mô-đun không sử dụng ...).
Tất nhiên bạn nên đã có hàng ngàn đơn vị kiểm tra để giúp bạn thử nghiệm với JDK mới ... :-)
Nguồn
2012-01-24 07:58:32
có thể trùng lặp của [Có bất kỳ ví dụ cụ thể nào về sự không tương thích ngược giữa các phiên bản Java không?] (Http://stackoverflow.com/questions/1654923/are-there-any-specific-examples-of-backward-incompatibilities-between -java-versi) –