web-dev-qa-db-ja.com

@Overrideで「スーパークラスメソッドをオーバーライドする必要がある」のはなぜですか?

次のコードは、public void onClick行。

この行の複数のマーカー
-Android.view.View.OnClickListener.onClickを実装します
-タイプnew View.OnClickListener(){}のメソッドonClick(View)は、スーパークラスメソッドをオーバーライドする必要があります

理由がわかりません。このコードは、私が見た多くの例から取られています。何が間違っている可能性がありますか?

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);
            }
        }
    });
}
63
Richard Eng

プロジェクトのプロパティを確認し、Javaコンパイラ->コンパイラ準拠レベル1.6に設定されていることを確認します。

140

これは、おそらくJava 1.5と1.6の間のソースコードレベルの非互換性によるものです。

  • Java 5、@Overrideアノテーションを使用するには、メソッドが実際にスーパークラスのメソッドをオーバーライドしている必要があります。

  • Java 6以降では、@Overrideアノテーションは、メソッドがスーパークラスまたはインターフェースで抽象メソッドを実装している場合、alsoを満たします。

したがって、動作することが期待されるコードでこれを確認する最も可能性の高い理由は、Java 6(以降)のコードをJava 5コンパイラでコンパイルしていることです。 (または、コンパイラーのソース準拠レベルが5に設定されている他のコンパイラー)。

46
Stephen C

MAVEN USERSビルドに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>
4
John McDonald

コンパイラを1.6に設定してもこのエラーが発生する場合は、インポートを確認してください。Eclipseは常にこれを実行しようとするためです。

import Android.content.DialogInterface.OnClickListener  

->の代わりに

import Android.view.View.OnClickListener

それは私の問題を解決します。

4

View.onCLickListener()を追加することで問題は解決しました。 My Java Compiler-> Compiler Compliance levelはすでに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);
            }
        });

私の場合は問題を解決しました。

0
Amogh Natu

私にとってこれは、オーバーライドしたいメソッドがpackage privateであり、別のパッケージからオーバーライドしようとしたために発生しました。

その場合、Eclipseはさらに警告を出しますが、他の多くの警告のために私は気づきませんでした

0
Qw3ry

今では2018年です!簡単に参照するには、以下のスクリーンショットを参照してください。

enter image description here

0