Why do I get “must override a superclass method” with @Override?
以下代码在
Multiple markers at this line
- implements android.view.View.OnClickListener.onClick
- The method onClick(View) of type new View.OnClickListener(){} must override a superclass method
我不明白为什么。这段代码取自我见过的许多例子。可能有什么问题?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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); } } }); } |
检查项目的属性并验证Java编译器>编译器符合级别设置为1.6。
这很可能是由于Java 1.5和1.6之间的源代码级别不兼容。
在Java 5中,EDCOX1和0的注释要求该方法实际上重写了一个超类中的方法。
在Java 6和更高版本中,如果该方法在超类或接口中实现抽象方法,EDCOX1×0注释也将得到满足。
因此,在代码中看到这一点的最有可能的原因是,您要用Java 5编译器(或编译器的源遵从级别设置为5的其他编译器)编译Java 6(或更高版本)代码。
Maven用户如果您使用maven进行构建,它可以在构建期间覆盖Eclipse设置。因此,如果您将eclipse设置为1.7,但不专门设置maven jdk构建版本(在编写本文时默认为1.5),那么它将把eclipse目标编译器重置为1.5。如下设置maven编译器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <build> ... <plugins> .... <plugin> <groupId>org.apache.maven.plugins</groupId> maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> |
如果将编译器设置为1.6,但仍然出现此错误,请尝试检查导入,因为Eclipse总是尝试这样做。
1 | import android.content.DialogInterface.OnClickListener |
而不是->
1 |
这解决了我的问题。
现在是2018!为了便于参考,请参见下面的屏幕截图。
对我来说,发生这种情况是因为我想要重写的方法是package private,我试图从另一个包重写它。
Eclipse还将添加一个警告,在这种情况下,由于大量其他警告,我没有注意到。
放置一个view.onclickListener()解决了这个问题。我的Java编译器-->编译器遵从级别已经设置为1.6,但我仍然有同样的问题。
但是更改代码
1 2 3 4 5 6 7 8 | rdBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub onRadioButtonClicked(v); } }); |
到
1 2 3 4 5 6 7 8 |
解决了我的问题。