Dlaczego Eclipse narzeka na @Override w metodach interfejsu?


134

Mam istniejący projekt, który używa @Overridemetod, które zastępują metody interfejsu , zamiast metod nadklasy. Nie mogę tego zmienić w kodzie, ale chciałbym, aby Eclpse przestał narzekać na adnotację, ponieważ nadal mogę tworzyć za pomocą Maven.

Jak mam się zabrać do wyłączenia tego błędu?

Uwaga: ze względu na wymagania projektowe muszę skompilować dla Java 1.5.


Ale wydaje się, że źródłem jest Java 6?
akarnokd

W rzeczy samej. Java 5 była późnym wymaganiem do obsługi komputerów Mac.
Stefan Kendall

Odpowiedzi:


268

Używanie @Overrideadnotacji do metod, które implementują metody zadeklarowane przez interfejs, jest poprawne tylko od wersji Java 6. To błąd w Javie 5.

Upewnij się, że projekty IDE są skonfigurowane do korzystania ze środowiska JRE Java 6 i że „zgodność źródła” jest ustawiona na 1.6 lub nowszą:

  1. Otwórz okno dialogowe Okno> Preferencje
  2. Przejdź do Java> Kompilator.
  3. Tam ustaw „Poziom zgodności kompilatora” na 1,6.

Pamiętaj, że Eclipse może zastąpić te ustawienia globalne dla konkretnego projektu, więc sprawdź je również.


Aktualizacja:

Błąd w Javie 5 nie dotyczy tylko Eclipse; użycie javacbezpośrednio z wiersza poleceń spowoduje ten sam błąd. To nie jest poprawny kod źródłowy Java 5.

Można jednak określić tę -target 1.5opcję w JDK 6 javac, co spowoduje utworzenie pliku klasy wersji Java 5 z kodu źródłowego Java 6.


Nie, nie będzie. Spowoduje to wyświetlenie komunikatu o błędzie „javac: wersja źródłowa 1.6 wymaga wydania docelowego 1.6”.
Michael Borgwardt

9
Nie, nie będzie. Stworzy skompilowany plik klasy. Wyświetla ten błąd tylko wtedy, gdy podasz opcję -source 1.6, która nie jest konieczna, aby to zadziałało.
erickson

Wiesz, ponieważ i tak buduję ręcznie, mogę po prostu pozostawić poziom źródła na 1,6. Nie mogłem uruchomić żadnej mieszanej konfiguracji i wydaje się to najprostsze.
Stefan Kendall

@erickson czy downgrade -target -source działa również z 1.7 na 1.6? stackoverflow.com/q/8869869/632951
Pacerier

Wydaje się, że to nie działa z 1.8 JDK. -source 1.6 -target 1.5 mówi: javac: source release 1.6 wymaga docelowej wersji 1.6
Don Hatch

39

Wykonaj następujące czynności:

Projekt -> Właściwości -> kompilator java ->

  • Włącz ustawienia specyficzne dla projektu - „tak”
  • Zgodność kompilatora - 1.6
  • wygenerowane pliki klas i zgodność źródeł - 1.5

Dzięki - nie zdawałem sobie sprawy, że każdy projekt ma też swoje własne ustawienia
porządku

2
w moim przypadku musiałem wyłączyć tę opcję.
Muten Roshi,

12

Sprawdź również, czy projekt ma aspekt. Wersja java może zostać tam zastąpiona.


1
Wynik! Miałeś rację, mój aspekt projektu zastępował globalne ustawienia zgodności. Dzięki!
bpawlowski

9

Można włączyć ustawienia specyficzne dla projektu. Wybierz swój projekt Project > Properties > Java Compiler, uncheckz Enable project specific settingslub zmianę Jdk 1.6i powyżej, nie zapominając odpowiedni JRE.
Okrywać to nie działa, należy usunąć z projektu Eclipse, usuwać .settings folders, .project, .classpathpliki. clean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your projecti zaćmienie. U mnie to zadziałało


7

Możesz zmienić ustawienia kompilatora, aby akceptował składnię Java 6, ale generował dane wyjściowe Java 5 (o ile pamiętam). I ustaw "Zgodność generowanych plików klas" nieco niższą, jeśli jest to wymagane przez środowisko wykonawcze. Aktualizacja : sprawdziłem Eclipse, ale narzeka, jeśli ustawiłem zgodność źródła na 1.6 i zgodność klas na 1.5. Jeśli wersja 1.6 nie jest dozwolona, ​​zwykle ręcznie komentuję obraźliwe adnotacje @Override w źródle (co nie pomaga w twoim przypadku).

Aktualizacja2: Jeśli budujesz tylko ręcznie, możesz napisać mały program, który kopiuje oryginalny projekt do nowego, usuwa adnotacje @Override ze źródeł java i po prostu wciska Wyczyść projekt w Eclipse.


Czy możesz podać jakieś szczegóły?
Stefan Kendall

Jest na tej samej stronie, co podał Erickson.
akarnokd

Projekt ma kilka GB. Prosta „kopia” nie jest nawet praktyczna. : /
Stefan Kendall

W takim przypadku musisz poprosić o pozwolenie na zmianę. Lub utwórz gałąź dla źródeł zgodnych z 1.5 i ręcznie napraw pliki java.
akarnokd

1

Możesz także spróbować Retroweaver, aby utworzyć wersję Java5 z klas Java6.


1

Użyj Eclipse, aby wyszukać i zamienić (usunąć) wszystkie wystąpienia „@Override”. Następnie dodaj z powrotem zastąpienia niezwiązane z interfejsem za pomocą opcji „Wyczyść”.

Kroki:

  1. Wybierz projekty lub foldery zawierające pliki źródłowe.
  2. Wybierz „Wyszukaj> Wyszukaj ...” (Ctrl + H), aby wyświetlić okno dialogowe wyszukiwania.
  3. Przejdź do zakładki „Wyszukiwanie plików”.
  4. Wpisz „@Override” w polu „Zawiera tekst” i „* .java” w polu „Wzorce nazw plików”. Kliknij „Zamień ...”, a następnie „OK”, aby usunąć wszystkie wystąpienia „@Override”.
  5. Wybierz „Okno> Preferencje> Java> Styl kodu> Oczyść” i utwórz nowy profil.
  6. Edytuj profil i odznacz wszystko oprócz „Brakujący kod> Dodaj brakujące adnotacje> @Override”. Upewnij się, że opcja „Implementacje metod interfejsu” nie jest zaznaczona.
  7. Wybierz projekty lub foldery zawierające pliki źródłowe.
  8. Wybierz „Źródło> Oczyść ...” (Alt + Shift + s, a następnie U), a następnie „Zakończ”, aby z powrotem dodać zastąpienia niezwiązane z interfejsem.

0

Zrozumiałem twój problem, zmień swój jdk z jdk na większy niż 1.5


0

Skonfigurowanie, że projekty IDE są skonfigurowane do używania środowiska JRE Java 6 lub nowszego, czasami nie usuwa błędu zaćmienia. U mnie pomogło ponowne uruchomienie Eclipe IDE.


0

Nawet po zmianie ustawienia zgodności kompilatora na 1.6 lub 1.7 z zakładki Windows, potem prefernces, potem java, potem kompilator i ustawieniu zgodności kompilatora, nadal miałem ten problem. Chodzi o to, że musimy przejść do folderu projektu, kliknąć prawym przyciskiem myszy, Java i ustawić zgodność kompilatora na 1.6 lub wyższą. To zadziałało dla mnie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.