Почему я получаю "должен переопределить метод суперкласса" с помощью @Override?


следующий код генерирует это сообщение об ошибке на public void onClick линии.

несколько маркеров в этой строке
- реализует для Андроид.вид.Вид.OnClickListener.onClick
- Метод onClick (View) типа new View.OnClickListener(){} должны переопределить метод суперкласса

Я не могу понять, почему. Этот код взят из многочисленных примеров, которые я видел. Что может быть не так?

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);
            }
        }
    });
}
6   51   2012-01-02 08:54:43

6 ответов:

Проверьте свойства проекта и убедитесь, что компилятор Java - > уровень соответствия компилятора установлено значение 1.6.

это, скорее всего, связано с несовместимостью уровня исходного кода между Java 1.5 и 1.6.

  • в Java 5,@Override аннотация требует, чтобы метод фактически переопределяет метод суперкласса.

  • в Java 6 и позже @Override аннотации и будьте удовлетворены, если метод реализует абстрактный метод в суперклассе или интерфейсе.

Так что наиболее вероятная причина чтобы увидеть это в коде, который вы ожидаете работать, вы компилируете код Java 6 (или более поздний) с компилятором Java 5 (или некоторым другим компилятором с уровнем соответствия исходного кода компилятора, установленным на 5).

Если вы установили компилятор на 1.6 и все еще получаете эту ошибку, попробуйте проверить свой импорт, потому что Eclipse делает то, что он всегда пытается сделать это

import android.content.DialogInterface.OnClickListener  

вместо ->

import android.view.View.OnClickListener

это решает мою проблему.

ПОЛЬЗОВАТЕЛИ MAVEN Если вы используете Maven для сборки, он может переопределить параметры eclipse во время сборки. Поэтому, если вы установите Eclipse в 1.7, но специально не устанавливаете версию сборки Maven JDK(которая на момент написания этой статьи по умолчанию равна 1.5), то он сбросит целевой компилятор eclipse обратно в 1.5. Установите компилятор Maven следующим образом.

    <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>

ставите целью.onCLickListener () решил проблему для меня. Мой компилятор Java -- > уровень соответствия компилятора уже установлен на 1.6, но все же у меня была та же проблема.

но изменение кода

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);
            }
        });

решил проблему в моем случае.

для меня это произошло потому, что метод, который я хотел, чтобы переопределить был пакет private и я попытался переопределить его из другого пакета.

Eclipse дополнительно поставит предупреждение в том случае, если я не заметил из-за тонны других предупреждений