为什么我用@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还会在这种情况下发出警告,因为有很多其他的警告,所以我没有注意到