Tại sao Eclipse phàn nàn về @Override trên các phương thức giao diện?


134

Tôi có một dự án hiện có sử dụng @Overridecác phương thức ghi đè các phương thức giao diện , thay vì các phương thức siêu lớp. Tôi không thể thay đổi điều này trong mã, nhưng tôi muốn Eclpse ngừng phàn nàn về chú thích, vì tôi vẫn có thể xây dựng với Maven.

Làm thế nào tôi có thể đi về việc vô hiệu hóa lỗi này?

Lưu ý: Do yêu cầu của dự án, tôi cần biên dịch cho Java 1.5.


Nhưng có vẻ như nguồn được nhắm mục tiêu đến Java 6?
akarnokd

Thật. Java 5 là một yêu cầu muộn đối với hỗ trợ mac.
Stefan Kendall

Câu trả lời:


268

Sử dụng @Overridechú thích trên các phương thức triển khai các phương thức được khai báo bởi một giao diện chỉ có hiệu lực từ Java 6 trở đi. Đó là một lỗi trong Java 5.

Đảm bảo rằng các dự án IDE của bạn được thiết lập để sử dụng JRE Java 6 và "khả năng tương thích nguồn" được đặt thành 1.6 hoặc cao hơn:

  1. Mở hộp thoại> Tùy chọn cửa sổ
  2. Duyệt đến Java> Trình biên dịch.
  3. Ở đó, đặt "Mức tuân thủ trình biên dịch" thành 1.6.

Hãy nhớ rằng Eclipse có thể ghi đè các cài đặt toàn cục này cho một dự án cụ thể, do đó, hãy kiểm tra cả các cài đặt đó.


Cập nhật:

Lỗi trong Java 5 không chỉ với Eclipse; sử dụng javactrực tiếp từ dòng lệnh sẽ cho bạn cùng một lỗi. Nó không phải là mã nguồn Java 5 hợp lệ.

Tuy nhiên, bạn có thể chỉ định -target 1.5tùy chọn cho JDK 6 javac, sẽ tạo ra tệp lớp phiên bản Java 5 từ mã nguồn Java 6.


Không, nó sẽ không. Nó sẽ tạo ra một thông báo lỗi "javac: source release 1.6 yêu cầu phát hành mục tiêu 1.6".
Michael Borgwardt

9
Không, nó sẽ không. Nó sẽ tạo ra một tập tin lớp biên dịch. Nó chỉ đưa ra lỗi đó nếu bạn chỉ định tùy chọn -source 1.6, không cần thiết để thực hiện công việc này.
erickson

Bạn biết đấy, vì dù sao tôi cũng xây dựng thủ công, tôi chỉ có thể để mức nguồn ở mức 1.6. Tôi không thể làm cho bất kỳ loại cấu hình hỗn hợp nào hoạt động, và điều này có vẻ đơn giản nhất.
Stefan Kendall

@erickson, việc hạ cấp -target -source có hoạt động cho 1.7 đến 1.6 không? stackoverflow.com/q/8869869/632951
Pacerier

Điều này dường như không hoạt động với 1.8 JDK. -source 1.6 -target 1.5 cho biết: javac: nguồn phát hành 1.6 yêu cầu phát hành mục tiêu 1.6
Don hatch

39

Làm như sau:

Dự án -> Thuộc tính -> trình biên dịch java ->

  • Bật cài đặt cụ thể của dự án - 'có'
  • Trình biên dịch tuân thủ - 1.6
  • tạo các tệp lớp và khả năng tương thích nguồn - 1.5

Cảm ơn - không nhận ra mỗi dự án cũng có các cài đặt riêng
đó là

2
trong trường hợp của tôi, tôi cần phải tắt tùy chọn này.
úy Roshi

12

Kiểm tra cũng nếu dự án có khía cạnh. Phiên bản java có thể được ghi đè ở đó.


1
Ghi bàn! Bạn đã đúng, khía cạnh dự án của tôi đã ghi đè cài đặt tuân thủ toàn cầu. Cảm ơn!
bpawlowski

9

Cài đặt cụ thể của dự án có thể được kích hoạt. Chọn dự án của bạn Project > Properties > Java Compiler, uncheckcác Enable project specific settingshoặc thay đổi Jdk 1.6trở lên không quên tương ứng JRE.
Trong trường hợp nó không làm việc, loại bỏ dự án của bạn từ nhật thực, xóa .settings folders, .project, .classpathtập tin. clean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your projectvà nhật thực. Nó làm việc cho tôi


7

Bạn có thể thay đổi cài đặt trình biên dịch để chấp nhận cú pháp Java 6 nhưng tạo đầu ra Java 5 (như tôi nhớ). Và đặt "Khả năng tương thích tệp lớp đã tạo" thấp hơn một chút nếu thời gian chạy của bạn cần. Cập nhật : Tôi đã kiểm tra Eclipse, nhưng nó phàn nàn nếu tôi đặt khả năng tương thích nguồn thành 1.6 và khả năng tương thích lớp thành 1.5. Nếu 1.6 không được phép, tôi thường nhận xét thủ công các chú thích @Override vi phạm trong nguồn (không giúp ích gì cho trường hợp của bạn).

Update2: Nếu bạn chỉ xây dựng thủ công, bạn có thể viết một chương trình nhỏ sao chép dự án ban đầu vào một dự án mới, loại bỏ các chú thích @Override từ các nguồn java và bạn chỉ cần nhấn dự án Clean trong Eclipse.


Bạn có thể cung cấp bất kỳ chi tiết cụ thể?
Stefan Kendall

Nó nằm trên cùng một trang như erickson đã nêu.
akarnokd

Dự án lớn vài GB. Một "bản sao" đơn giản thậm chí không thực tế. : /
Stefan Kendall

Trong trường hợp này, bạn sẽ cần phải xin phép thay đổi. Hoặc tạo một nhánh cho 1,5 nguồn tương thích và tự sửa các tệp java.
akarnokd

1

Bạn cũng có thể thử Retroweaver để tạo phiên bản Java5 từ các lớp Java6.


1

Sử dụng Eclipse để tìm kiếm và thay thế (loại bỏ) tất cả các phiên bản của "@Override". Sau đó thêm lại phần ghi đè không có giao diện bằng cách sử dụng "Dọn sạch".

Các bước:

  1. Chọn các dự án hoặc thư mục chứa các tệp nguồn của bạn.
  2. Chuyển đến "Tìm kiếm> Tìm kiếm ..." (Ctrl-H) để hiển thị hộp thoại Tìm kiếm.
  3. Chuyển đến tab "Tìm kiếm tệp".
  4. Nhập "@Override" trong "Chứa văn bản" và "* .java" trong "Mẫu tên tệp". Nhấp vào "Thay thế ...", sau đó "OK", để xóa tất cả các phiên bản của "@Override".
  5. Chuyển đến "Cửa sổ> Tùy chọn> Java> Kiểu mã> Dọn dẹp" và tạo một hồ sơ mới.
  6. Chỉnh sửa hồ sơ và bỏ chọn mọi thứ trừ "Mã bị thiếu> Thêm chú thích bị thiếu> @Override". Đảm bảo rằng "Triển khai các phương thức giao diện" không được chọn.
  7. Chọn các dự án hoặc thư mục chứa các tệp nguồn của bạn.
  8. Chọn "Nguồn> Dọn dẹp ..." (Alt + Shift + s, sau đó là u), sau đó "Hoàn tất" để thêm lại các phần ghi đè không có giao diện.

0

Tôi hiểu vấn đề của bạn, thay đổi jdk của bạn từ jdk của bạn thành lớn hơn 1.5


0

Bằng cách định cấu hình rằng các dự án IDE được thiết lập để sử dụng JRE Java 6 hoặc cao hơn đôi khi không loại bỏ lỗi nhật thực. Đối với tôi, việc khởi động lại Eclipe IDE đã giúp.


0

Ngay cả sau khi thay đổi cài đặt tuân thủ trình biên dịch thành 1.6 hoặc 1.7 từ tab windows, sau đó thích java, rồi trình biên dịch và cài đặt tuân thủ trình biên dịch, tôi vẫn gặp vấn đề này. Ý tưởng là chúng ta cần vào thư mục dự án, nhấp chuột phải, Java và đặt tuân thủ trình biên dịch thành 1.6 hoặc higer. Điều này làm việc cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.