Metode default memerlukan perubahan pada bytecode dan JVM yang tidak mungkin dilakukan di Java 7. Verifikasi bytecode Java 7 dan di bawahnya akan menolak antarmuka dengan badan metode (kecuali untuk metode initializer statis). Mencoba meniru metode default dengan metode statis di sisi penelepon tidak akan menghasilkan hasil yang sama, karena metode default dapat ditimpa dalam subkelas. Retrolambda memiliki dukungan terbatas untuk backporting metode default, tetapi tidak pernah dapat sepenuhnya didukung karena benar-benar membutuhkan fitur JVM baru.
Lambdas dapat berjalan di Java 7 apa adanya, jika kelas API yang diperlukan hanya akan ada di sana. Instruksi invokedynamic ada di Java 7, tetapi akan mungkin untuk mengimplementasikan lambdas sehingga menghasilkan kelas lambda pada waktu kompilasi (build JDK 8 awal melakukannya seperti itu) dalam hal ini akan bekerja pada versi Java apa pun. (Oracle memutuskan untuk menggunakan invokedynamic untuk lambdas untuk pembuktian di masa depan; mungkin suatu hari JVM akan memiliki fungsi kelas satu, jadi invokedynamic dapat diubah untuk menggunakannya daripada menghasilkan kelas untuk setiap lambda, sehingga meningkatkan kinerja.) Yang dilakukan Retrolambda adalah bahwa itu memproses semua instruksi invokedynamic dan menggantinya dengan kelas anonim; sama seperti apa yang dilakukan Java 8 saat runtime ketika lamdba invokedynamic disebut pertama kali.
Pengulangan Anotasi hanyalah gula sintaksis. Mereka bytecode kompatibel dengan versi sebelumnya. Di Java 7 Anda hanya perlu menerapkan sendiri metode pembantu (mis. GetAnnotationsByType ) yang menyembunyikan detail implementasi anotasi wadah yang berisi anotasi berulang.
AFAIK, Jenis Anotasi hanya ada pada waktu kompilasi, jadi mereka seharusnya tidak memerlukan perubahan bytecode, jadi hanya mengubah nomor versi bytecode dari kelas Java 8 yang dikompilasi harus cukup untuk membuatnya bekerja di Java 7.
Nama parameter metode ada dalam bytecode dengan Java 7, jadi itu juga kompatibel. Anda dapat mengaksesnya dengan membaca bytecode metode dan melihat nama variabel lokal di informasi debug metode. Sebagai contoh, Spring Framework melakukan hal itu untuk mengimplementasikan @PathVariable , jadi mungkin ada metode pustaka yang bisa Anda panggil. Karena metode antarmuka abstrak tidak memiliki tubuh metode, informasi debug itu tidak ada untuk metode antarmuka di Java 7, dan AFAIK tidak di Java 8.
Fitur-fitur baru lainnya kebanyakan adalah API baru, peningkatan pada HotSpot dan tooling. Beberapa API baru tersedia sebagai perpustakaan pihak ketiga (mis. ThreeTen-Backport dan streamsupport ).
Summa summarum, metode standar membutuhkan fitur JVM baru tetapi fitur bahasa lainnya tidak. Jika Anda ingin menggunakannya, Anda harus mengkompilasi kode di Java 8 dan kemudian mengubah bytecode dengan format Retrolambda ke Java 5/6/7. Minimal versi bytecode perlu diubah, dan javac tidak diizinkan -source 1.8 -target 1.7
sehingga diperlukan retrotranslator.