it-swarm.com.de

Warum bekomme ich mit @Override "muss eine Superklassenmethode überschreiben"?

Der folgende Code generiert diese Fehlermeldung in der Zeile public void onClick.

Mehrere Marker in dieser Zeile
- implementiert Android.view.View.OnClickListener.onClick
- Die Methode onClick (View) vom Typ new View.OnClickListener () {} muss eine Superklassenmethode überschreiben

Ich kann nicht verstehen warum. Dieser Code stammt aus zahlreichen Beispielen, die ich gesehen habe. Was kann falsch sein?

private Button audioButton;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    audioButton = (Button) findViewById(R.id.imageButton1);
    audioButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View button) {
            if (button.isSelected()) {
                button.setSelected(false);
            }
            else {
                button.setSelected(true);
            }
        }
    });
}
55
Richard Eng

Überprüfen Sie die Eigenschaften des Projekts und stellen Sie sicher, dass Java Compiler -> Compiler-Konformitätsstufe auf 1.6 eingestellt ist.

130

Dies ist höchstwahrscheinlich auf eine Inkompatibilität der Quellcodeebene zwischen Java 1.5 und 1.6 zurückzuführen.

  • In Java 5 erfordert die Annotation @Override, dass die Methode tatsächlich eine Methode in einer Superklasse überschreibt.

  • In Java 6 und höher wird die Annotation @Overridealso erfüllt, wenn die Methode eine abstrakte Methode in einer Superklasse oder Schnittstelle implementiert.

Der wahrscheinlichste Grund dafür, dass dies im erwarteten Code zu sehen ist, liegt darin, dass Sie Java 6-Code (oder höher) mit einem Java 5-Compiler (oder einem anderen Compiler mit einem Quell-Kompatibilitätsgrad des Compilers von 5) kompilieren.

43
Stephen C

Wenn Sie den Compiler auf 1.6 setzen und immer noch diese Fehlermeldung erhalten, versuchen Sie, Ihre Importe zu überprüfen, denn Eclipse versucht, dies immer zu tun 

import Android.content.DialogInterface.OnClickListener  

statt -> 

import Android.view.View.OnClickListener

Das löst mein Problem.

4

MAVEN USERS Wenn Sie Maven für Build verwenden, können die Eclipse-Einstellungen beim Build überschrieben werden. Wenn Sie also Eclipse auf 1.7 setzen, aber nicht ausdrücklich die Maven JDK-Buildversion (die zum Zeitpunkt dieses Schreibens standardmäßig auf 1,5 eingestellt ist) festlegen, wird der Eclipse-Zielcompiler auf 1.5 zurückgesetzt. Stellen Sie den Maven-Compiler wie folgt ein.

    <build>
        ...
        <plugins>
            ....
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>            
    </build>
3
John McDonald

Das Setzen eines View.onCLickListener () löste das Problem für mich. Mein Java-Compiler -> Compiler-COmpliance-Level ist bereits auf 1.6 eingestellt, aber ich hatte immer noch das gleiche Problem.

Aber den Code ändern

rdBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                onRadioButtonClicked(v);
            }
        });

zu 

rdBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                onRadioButtonClicked(v);
            }
        });

löste das Problem in meinem Fall.

0
Amogh Natu

Für mich geschah dies, weil die Methode, die ich überschreiben wollte, package private war und ich versuchte, sie aus einem anderen Paket zu überschreiben.

Eclipse wird in diesem Fall zusätzlich eine Warnung ausgeben, die ich aufgrund einer Menge anderer Warnungen nicht bemerkt habe

0
Qw3ry

Jetzt ist es 2018! Eine einfache Referenz finden Sie in der Abbildung unten. 

 enter image description here

0