web-dev-qa-db-fra.com

Pourquoi est-ce que je reçois "doit remplacer une méthode de superclasse" avec @Override?

Le code suivant génère ce message d'erreur à la ligne public void onClick.

Plusieurs marqueurs à cette ligne
- implémente Android.view.View.OnClickListener.onClick
- La méthode onClick (View) de type new View.OnClickListener () {} doit remplacer une méthode de superclasse

Je ne comprends pas pourquoi. Ce code est tiré de nombreux exemples que j'ai vus. Qu'est-ce qui peut éventuellement être faux?

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

Vérifiez les propriétés du projet et vérifiez que Compilateur Java -> Niveau de conformité du compilateur est défini sur 1.6 .

130

Ceci est probablement dû à une incompatibilité de code source entre Java 1.5 et 1.6.

  • En Java 5, l'annotation @Override nécessite que la méthode remplace en réalité une méthode dans une superclasse.

  • Dans Java 6 et les versions ultérieures, l'annotation @Override sera également / satisfaite si la méthode implémente une méthode abstraite dans une superclasse ou une interface.

Ainsi, la raison la plus probable pour voir cela dans le code que vous comptez utiliser est que vous compilez du code Java 6 (ou version ultérieure) avec un compilateur Java 5 (ou un autre compilateur avec le niveau de conformité source du compilateur défini sur 5).

43
Stephen C

Si vous définissez le compilateur sur 1.6 et obtenez toujours cette erreur, essayez de vérifier vos importations, car Eclipse essaie toujours de le faire. 

import Android.content.DialogInterface.OnClickListener  

au lieu de -> 

import Android.view.View.OnClickListener

Cela résout mon problème.

4
John Paul Manoza

MAVEN USERS Si vous utilisez Maven pour la construction, il peut remplacer les paramètres Eclipse lors de la construction. Ainsi, si vous définissez Eclipse sur 1.7 mais que vous ne définissez pas spécifiquement la version de compilation Maven JDK (qui par défaut était définie sur 1.5), le compilateur cible Eclipse sera réinitialisé sur 1.5. Définissez le compilateur Maven comme suit.

    <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

Mettre un View.onCLickListener () m'a résolu le problème. Mon compilateur Java -> Le niveau de compilateur du compilateur est déjà défini sur 1,6, mais je rencontrais le même problème.

Mais changer le code

rdBtn.setOnClickListener(new OnClickListener() {

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

à 

rdBtn.setOnClickListener(new View.OnClickListener() {

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

résolu le problème dans mon cas.

0
Amogh Natu

Pour moi, cela s’est produit parce que la méthode que je voulais remplacer était package private et j’ai essayé de le remplacer à partir d’un autre package.

Eclipse mettra en outre un avertissement dans ce cas que je n'ai pas remarqué à cause d'une tonne d'autres avertissements

0
Qw3ry

Nous sommes en 2018! Pour une référence facile, voir la capture d'écran ci-dessous. 

 enter image description here

0