Mengapa Eclipse mengeluh tentang @Override pada metode antarmuka?

135

Saya memiliki proyek yang ada yang menggunakan @Overridemetode yang menggantikan metode antarmuka , daripada metode superclass. Saya tidak dapat mengubah ini dalam kode, tetapi saya ingin Eclpse berhenti mengeluh tentang anotasi, karena saya masih dapat membangun dengan Maven.

Bagaimana cara saya menonaktifkan kesalahan ini?

Catatan: Karena persyaratan proyek, saya perlu melakukan kompilasi untuk Java 1.5.

Stefan Kendall
sumber
Tapi sepertinya sumbernya ditargetkan ke Java 6?
akarnokd
Memang. Java 5 adalah persyaratan terlambat untuk dukungan mac.
Stefan Kendall

Jawaban:

268

Penggunaan @Overrideanotasi pada metode yang mengimplementasikan yang dideklarasikan oleh antarmuka hanya valid mulai dari Java 6 dan seterusnya. Ini adalah kesalahan di Java 5.

Pastikan project IDE Anda disiapkan untuk menggunakan Java 6 JRE, dan "kompatibilitas sumber" disetel ke 1.6 atau lebih tinggi:

  1. Buka jendela> dialog Preferensi
  2. Jelajahi ke Java> Compiler.
  3. Di sana, setel "Level kepatuhan penyusun" ke 1.6.

Ingatlah bahwa Eclipse dapat mengganti pengaturan global ini untuk proyek tertentu, jadi periksa juga.


Memperbarui:

Kesalahan di bawah Java 5 tidak hanya dengan Eclipse; menggunakan javaclangsung dari baris perintah akan memberi Anda kesalahan yang sama. Ini bukan kode sumber Java 5 yang valid.

Namun, Anda dapat menentukan -target 1.5opsi untuk JDK 6 javac, yang akan menghasilkan file kelas versi Java 5 dari kode sumber Java 6.

erickson
sumber
Tidak, tidak akan. Ini akan menghasilkan pesan kesalahan "javac: rilis sumber 1.6 membutuhkan rilis target 1.6".
Michael Borgwardt
9
Tidak, tidak akan. Ini akan menghasilkan file kelas yang dikompilasi. Ini hanya memberikan kesalahan itu jika Anda menentukan opsi -sumber 1.6, yang tidak diperlukan untuk membuat ini berfungsi.
erickson
Anda tahu, karena saya membangun secara manual, saya dapat membiarkan level sumber di 1.6. Saya tidak bisa mendapatkan konfigurasi campuran apa pun yang berfungsi, dan ini tampaknya paling sederhana.
Stefan Kendall
@erickson apakah -target -source downgrade berfungsi untuk 1,7 hingga 1,6 juga? stackoverflow.com/q/8869869/632951
Pacerier
Ini sepertinya tidak bekerja dengan 1,8 JDK. -source 1.6 -target 1.5 mengatakan: javac: rilis sumber 1.6 membutuhkan rilis target 1.6
Don Hatch
39

Lakukan sebagai berikut:

Proyek -> Properti -> compiler java ->

  • Aktifkan pengaturan khusus proyek - 'ya'
  • Kepatuhan penyusun - 1.6
  • file kelas yang dihasilkan dan kompatibilitas sumber - 1.5
mitko
sumber
Terima kasih - tidak menyadari setiap proyek juga memiliki pengaturannya sendiri
mana
2
dalam kasus saya, saya perlu menonaktifkan opsi ini.
Muten Roshi
12

Periksa juga apakah proyek tersebut memiliki segi. Versi java mungkin diganti di sana.

gdoumenc.dll
sumber
1
Skor! Anda benar, aspek proyek saya menggantikan setelan kepatuhan global. Terima kasih!
bpawlowski
9

Pengaturan khusus proyek mungkin diaktifkan. Pilih proyek Anda Project > Properties > Java Compiler, uncheckyang Enable project specific settingsatau perubahan Jdk 1.6dan di atas tidak melupakan yang sesuai JRE.
Memetikan itu tidak bekerja, menghapus proyek Anda dari gerhana, menghapus .settings folders, .project, .classpathfile. clean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your projectdan gerhana. Itu berhasil untuk saya

Henry
sumber
7

Anda dapat mengubah pengaturan kompilator untuk menerima sintaks Java 6 tetapi menghasilkan keluaran Java 5 (seperti yang saya ingat). Dan setel "kompatibilitas file kelas yang dihasilkan" sedikit lebih rendah jika diperlukan oleh runtime Anda. Pembaruan : Saya memeriksa Eclipse, tetapi mengeluh jika saya menetapkan kompatibilitas sumber ke 1.6 dan kompatibilitas kelas ke 1.5. Jika 1.6 tidak diizinkan, saya biasanya secara manual mengomentari anotasi @Override yang menyinggung di sumber (yang tidak membantu kasus Anda).

Pembaruan2: Jika Anda hanya membuat manual, Anda dapat menulis program kecil yang menyalin proyek asli ke yang baru, menghapus anotasi @Override dari sumber java dan Anda baru saja menekan proyek Bersihkan di Eclipse.

akarnokd
sumber
Bisakah Anda memberikan rinciannya?
Stefan Kendall
Itu ada di halaman yang sama seperti yang dinyatakan oleh erickson.
akarnokd
Proyek ini berukuran beberapa GB. Sebuah "salinan" sederhana bahkan tidak praktis. : /
Stefan Kendall
Dalam hal ini, Anda harus meminta izin perubahan. Atau buat cabang untuk 1.5 sumber yang kompatibel dan perbaiki file java secara manual.
akarnokd
1

Anda juga dapat mencoba Retroweaver untuk membuat versi Java5 dari kelas Java6.


sumber
1

Gunakan Eclipse untuk mencari dan mengganti (menghapus) semua contoh "@Override". Kemudian tambahkan kembali non-interface override menggunakan "Clean Up".

Langkah:

  1. Pilih proyek atau folder yang berisi file sumber Anda.
  2. Pergi ke "Search> Search ..." (Ctrl-H) untuk memunculkan dialog Search.
  3. Buka tab "Pencarian File".
  4. Masukkan "@Override" dalam "Mengandung teks" dan "* .java" dalam "Pola nama file". Klik "Ganti ...", lalu "OK", untuk menghapus semua contoh "@Override".
  5. Pergi ke "Window> Preferences> Java> Code Style> Clean Up" dan buat profil baru.
  6. Edit profil, dan hapus centang semuanya kecuali "Kode Hilang> Tambahkan Anotasi yang hilang> @Override". Pastikan "Penerapan metode antarmuka" tidak dicentang.
  7. Pilih proyek atau folder yang berisi file sumber Anda.
  8. Pilih "Source> Clean Up ..." (Alt + Shift + s, lalu u), lalu "Finish" untuk menambahkan kembali non-interface override.
Peter Tseng
sumber
0

Saya mengerti masalah Anda, ubah jdk Anda dari jdk ke lebih besar dari 1.5

Gen
sumber
0

Dengan mengonfigurasi bahwa proyek IDE diatur untuk menggunakan Java 6 JRE atau lebih tinggi terkadang tidak menghilangkan kesalahan gerhana. Bagi saya restart Eclipe IDE membantu.

IstaLibera
sumber
0

Bahkan setelah mengubah pengaturan kepatuhan kompilator menjadi 1.6 atau 1.7 dari tab windows, lalu prefernces, lalu java, lalu kompilator dan pengaturan kepatuhan kompilator, saya masih mengalami masalah ini. Idenya adalah kita perlu pergi ke folder proyek, klik kanan, Java dan setel compiler compliance ke 1.6 atau lebih tinggi. Ini berhasil untuk saya.

Ranjan
sumber