Các phương thức mặc định yêu cầu các thay đổi như vậy đối với mã byte và JVM mà chúng không thể thực hiện được trên Java 7. Trình xác minh mã byte của Java 7 trở xuống sẽ từ chối các giao diện với các thân phương thức (ngoại trừ phương thức khởi tạo tĩnh). Cố gắng mô phỏng các phương thức mặc định bằng các phương thức tĩnh ở phía người gọi sẽ không tạo ra kết quả tương tự, bởi vì các phương thức mặc định có thể bị ghi đè trong các lớp con. Retrolambda đã hỗ trợ hạn chế cho việc nhập các phương thức mặc định, nhưng nó không bao giờ có thể được nhập hoàn toàn bởi vì nó thực sự đòi hỏi các tính năng JVM mới.
Lambdas có thể chạy trên Java 7, nếu các lớp API cần thiết chỉ tồn tại ở đó. Lệnh inv invocate tồn tại trên Java 7, nhưng có thể triển khai lambdas để nó tạo ra các lớp lambda vào thời gian biên dịch (các bản dựng JDK 8 ban đầu đã làm theo cách đó) trong trường hợp đó nó sẽ hoạt động trên bất kỳ phiên bản Java nào. (Oracle đã quyết định sử dụng invokeocate cho lambdas để chứng minh trong tương lai; có thể một ngày nào đó JVM sẽ có các hàm hạng nhất, do đó, inv invocate có thể được thay đổi để sử dụng chúng thay vì tạo một lớp cho mọi lambda, do đó cải thiện hiệu năng.) Retrolambda làm gì rằng nó xử lý tất cả các hướng dẫn inv invocate và thay thế chúng bằng các lớp ẩn danh; giống như những gì Java 8 thực hiện trong thời gian chạy khi một lệnh gọi lamdba được gọi lần đầu tiên.
Lặp đi lặp lại chú thích chỉ là cú pháp cú pháp. Chúng là mã byte tương thích với các phiên bản trước. Trong Java 7, bạn chỉ cần tự thực hiện các phương thức của trình trợ giúp (ví dụ getAnnotationsByType ) để ẩn chi tiết triển khai của một chú thích chứa có chứa các chú thích lặp đi lặp lại.
AFAIK, Chú thích loại chỉ tồn tại vào thời gian biên dịch, vì vậy chúng không nên yêu cầu thay đổi mã byte, do đó, chỉ cần thay đổi số phiên bản mã byte của các lớp được biên dịch Java 8 là đủ để chúng hoạt động trên Java 7.
Tên tham số của phương thức tồn tại trong mã byte với Java 7, do đó cũng tương thích. Bạn có thể có quyền truy cập vào chúng bằng cách đọc mã byte của phương thức và xem tên biến cục bộ trong thông tin gỡ lỗi của phương thức. Ví dụ, Spring Framework thực hiện chính xác điều đó để triển khai @PathVariable , vì vậy có thể có một phương thức thư viện mà bạn có thể gọi. Vì các phương thức giao diện trừu tượng không có phần thân phương thức, thông tin gỡ lỗi đó không tồn tại cho các phương thức giao diện trong Java 7 và AFAIK cũng không có trên Java 8.
Các tính năng mới khác chủ yếu là các API mới, cải tiến cho HotSpot và công cụ. Một số API mới có sẵn dưới dạng thư viện của bên thứ 3 (ví dụ ThreeTen-Backport và hỗ trợ truyền phát ).
Tóm tắt, các phương thức mặc định yêu cầu các tính năng JVM mới nhưng các tính năng ngôn ngữ khác thì không. Nếu bạn muốn sử dụng chúng, bạn sẽ cần biên dịch mã trong Java 8 và sau đó chuyển đổi mã byte bằng Retrolambda sang định dạng Java 5/6/7. Tối thiểu phiên bản mã byte cần phải được thay đổi và javac không cho phép trình -source 1.8 -target 1.7
điều khiển retrotranslator.