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

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

这条线上有多个标记
– 实现android.view.View.OnClickListener.onClick
– typesnew 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); } } }); } 

检查项目的属性,并validationJava编译器 – >编译器符合性级别是否设置为1.6

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

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

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

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

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

 import android.content.DialogInterface.OnClickListener 

而不是 – >

 import android.view.View.OnClickListener 

这解决了我的问题。

MAVEN用户如果您使用Maven构build,可以在构build期间覆盖eclipse设置。 所以如果你将Eclipse设置为1.7,但是没有专门设置Maven JDK构build版本(在编写本文时默认为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> 

把一个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); } }); 

在我的情况下解决了这个问题。

对我来说,这是因为我想重写的方法是包私人 ,我试图覆盖它从一个不同的包。

Eclipse还会在这种情况下发出警告,因为有很多其他的警告,所以我没有注意到