为什么我得到“必须覆盖一个超类方法”与@覆盖?

下面的代码在 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);
}
}
});
}
86250 次浏览

检查项目的属性并验证 Java 编译器-> 编译器遵从级别是否设置为 1.6(或更高版本)。

对我很有效... 我用的是 Eclipse 2021... 还有..。

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

  • 在 Java5中,@Override注释要求该方法实际上是重写超类中的一个方法。

  • 在 Java6和更高版本中,如果方法在超类或接口中实现抽象方法,则 @Override注释将得到满足。

因此,在代码中看到这种情况的最有可能的原因是,您正在使用 Java5编译器编译 Java6(或更高版本)代码(或其他编译器的源代码遵从级别设置为5的编译器)。

如果您将编译器设置为1.6并且仍然得到这个错误,请尝试检查您的导入,因为 Eclipse 所做的是它总是尝试这样做

import android.content.DialogInterface.OnClickListener

而不是->

import android.view.View.OnClickListener

我的问题解决了。

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

解决了我的问题。

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>

对我来说,发生这种情况是因为我想重写的 Method 是 私人包裹,我试图从另一个包重写它。

Eclipse 将在这种情况下另外放置一个我没有注意到的警告,因为有大量其他警告

现在是2018年了! 为了方便参考,请看下面的截图。

enter image description here

现在是2020年了,你应该把服从度改成1.8!

我试过把顺从度调到1.6但没用。我试着把它随机地改成其他级别,比如11,12或者13,但是也没有用。

在读了一会儿之后,我发现了这个话题,它帮助我理解了: Eclipse 中的“编译器遵从级别”是什么?

读到 Java 编译器可以编译将在 JVM 的早期版本上运行的代码。我已经把编译器级别改为 1.8,它确实解决了这个问题。因此,始终以最高的合规水平为目标!

现在是2020年

Project > 右击 > Java 编译器 > 编译器兼容级别 > 将其更改为1.8[或最新级别]

enter image description here

  1. 在 buildpath 的库部分将 jdk 版本更改为最小1.8。
  2. 将您的项目 facets java 版本更改为1.8 application 并关闭

你的问题终于解决了。

对于在 maven 中使用 VScode的用户,可以将 这些设置添加到 pom.xml 中,让 vscode 使用首选的编译器版本:

<project>
...
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
</project>