首页 文章

为什么我用@Override获得“必须覆盖超类方法”?

提问于
浏览
57

以下代码在 public void onClick 行生成此错误消息 .

此行中有多个标记 - 实现android.view.View.OnClickListener.onClick - 新类型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);
            }
        }
    });
}

7 回答

  • 44

    检查项目的属性并验证 Java Compiler -> Compiler compliance level 是否设置为 1.6 .

  • 4

    这很可能是由于Java 1.5和1.6之间的源代码级别不兼容 .

    • 在Java 5中, @Override 注释要求该方法实际上覆盖超类中的方法 .

    • 在Java 6及更高版本中,如果方法在超类或接口中实现抽象方法,则也将满足 @Override 注释 .

    因此,在您期望工作的代码中看到这一点的最可能的原因是您正在使用Java 5编译器(或编译器的源合规性级别设置为5的其他编译器)编译Java 6(或更高版本)代码 .

  • 131

    如果将编译器设置为1.6并仍然出现此错误,请尝试检查导入,因为Eclipse的作用是它始终尝试执行此操作

    import android.content.DialogInterface.OnClickListener
    

    而不是 - >

    import android.view.View.OnClickListener
    

    这解决了我的问题 .

  • 0

    MAVEN USERS 如果你专门设置了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>
    
  • 0

    放一个View.onCLickListener()解决了我的问题 . 我的Java编译器 - >编译器COmpliance级别已设置为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

    对我来说,这发生了,因为我想覆盖的方法是 package private ,我试图从另一个包覆盖它 .

    Eclipse会另外发出一个警告,因为有很多其他警告,我没有注意到

  • 4

    现在是2018年!为便于参考,请参见下面的截图 .

    enter image description here

相关问题