Błąd w Java SDK 1.5! – The method onClick(View) of type new View.OnClickListener(){} must override a superclass method
Posted by kashiash w dniu 19 grudnia, 2010
Problem który zmarnował mi kilka godzin jakże cennego życia:
dla kodu:
mAgreementDateText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pickDate((Button) v);
}
pojawiał sie komunikat :
The method onClick(View) of type new View.OnClickListener(){} must override a superclass method.
Okazalo się że Java SDK 1.5 ma problem z override. Trzeba dla projektu wejsc do Properties (Ctrl-Enter) i zmienić Java compiler na 1.6 i włala
jednak moja podświadoma niechęć do javy i eclipsa ma swoje uzasadnienie 😉
VaNTa said
To nie blad tylko feature. Java 1.5 za override uwaza tylko nadpisanie metody z klasy nadrzednej a nie implementacje metody z interfejsu. W javie 1.6 juz jest to „poprawnione”, czyli zgodne z intuicja.
W Twoim przypadku problemem jest eclipse, ktory wygenerowal Ci adnotacje @Override dla implementacji metody z interfejsu, mimo ze miales w projekcie ustawiona jave 1.5
kashiash said
nie eclipse wpisał override tylko MOBY, bo tak go nauczyłem … a tak mnie nauczyły przykłady z netu.
Dziwne było to ze działało z override, potem przeinstalowałem komputer i przestało. A irytujący jest temat gdy na jednym komputerze ma być override a na drugim nie – w tym samym kodzie, w tej samej aplikacji.
VaNTa said
To nie kwestia komputera, tylko kompilatoa a dokladniej jego poziomu zgodnosci kodu wynikowego. Zobacz Java Language Specification (JLS).
Jesli chcesz by komus zadzailo z Java 1.4 to np. musialbys zrezygnowac z adnotacji. Innym rozwiazaniem jest powiedzenie: „moj tool generuj kod dla javy 1.6” i tyle 🙂
kashiash said
i nie ukrywam, ze dokładnie tak che to robić