使用Java @Override注释的最佳实践是什么?为什么?
使用@Override注释标记每个重写方法似乎有点过分.是否有某些编程情况需要使用@Override和其他不应该使用的@Override?
以下代码在该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);
}
}
});
}
Run Code Online (Sandbox Code Playgroud) 当我实现接口的方法时,Eclipse正在添加@Override注释.Eclipse似乎对此没有任何问题.我们Cruise Control的自动构建过程似乎对此没有任何问题.但是当我从命令行构建时,使用运行javac的ant,我收到此错误:
[javac] C:\path\project\src\com\us\MyClass.java:70: method does not override a method from its superclass
[javac] @Override
[javac] ^
[javac] 1 error
Run Code Online (Sandbox Code Playgroud)
Eclipse在Java 1.6下运行.Cruise Control正在运行Java 1.5.无论我使用哪个版本的Java,我的ant构建都会失败.
我@Override在Eclipse中有一个令人讨厌的注释问题.通常,当我在新PC上导入工作项目时,Eclipse会将某些@Override注释标记为错误.如果我删除注释一切都很好,Eclipse也表示方法覆盖了父方法,但添加覆盖注释会再次导致错误.我目前正在开发一个Android项目,所以它可能是Android的问题,而不是Eclipse.
我有以下Android代码,一旦按下按钮就可以播放声音:
Button SoundButton2 = (Button)findViewById(R.id.sound2);
SoundButton2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mSoundManager.playSound(2);
}
});
Run Code Online (Sandbox Code Playgroud)
我的问题是我希望在按下按钮(触摸下来)时立即播放声音,而不是在释放声音时(触摸起来).有关如何实现这一目标的任何想法?
该文件.settings/org.eclipse.jdt.core.prefs是项目的一部分还是我个人eclipse配置的一部分?
我应该将它添加到版本控制吗?
我不知道为什么每次实现一个类.当我使用@OverrideEclipse总是注意到错误:
类型B的方法A必须覆盖超类方法
(方法A是我覆盖的方法,B是我工作的当前类)
Eclipse建议删除 @Override
但是使用相同的代码,我在Idea上工作,没有发现错误.
请问谁可以告诉我原因.
谢谢 :)
@Edit:哦,我没有准确发布代码,因为当我实现某事时它会发生:例如:
public class helloworld implements Runnable {
@Override //this line no-error with Idea and error with eclipse:the method run of type helloworld must be override a super class
public void run(){
}
Run Code Online (Sandbox Code Playgroud) 我正在研究独立的无头RCP.当我在eclipse IDE中执行应用程序和产品时它没有问题,但是当我导出并执行它时,我在日志文件中得到了这个错误.

!ENTRY org.eclipse.equinox.ds 4 0 2013-01-16 13:27:59.132
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.BundleException: The bundle "org.eclipse.equinox.ds_1.4.0.v20120522-1841 [3]" could not be resolved. Reason: Missing Constraint: Import-Package: org.eclipse.equinox.internal.util.event; version="1.0.0"
at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316)
...
!ENTRY org.eclipse.equinox.ds 4 0 2013-01-16 13:28:00.901
!MESSAGE [SCR] Exception while activating instance org.eclipse.e4.ui.css.swt.internal.theme.ThemeEngineManager@6b8d6157 of component org.eclipse.e4.ui.css.swt.theme
!STACK 0
java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Display
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
Run Code Online (Sandbox Code Playgroud)
参考这篇文章,我知道我有一个没有依赖项的插件的新版本,并且运行时路径中有一些错误.但是,我不确定可能导致此错误的原因.
可能有什么问题?为什么我只有在独立执行时才会出现此错误?
我有build.properties文件
output.. = bin/
bin.includes = META-INF/,\
plugin.xml,\
.
source.. = src/
Run Code Online (Sandbox Code Playgroud)
这是MANIFEST.MF文件
Manifest-Version: 1.0 …Run Code Online (Sandbox Code Playgroud) 我安装了m2eclipse来在Eclipse中构建一个java项目.
我按如下方式导入了项目:
Import->
Maven->
Existing Maven Projects->
Import Maven Projects->
- Select root directory
- Select pom file
- Click Finish
Run Code Online (Sandbox Code Playgroud)
为了确保m2eclipse实际上正在构建项目,我删除了目标目录,并确保它是由m2eclipse重新创建的,它确实是.但与完全构建所有内容的maven的命令行版本不同,m2eclipse在源代码中留下了大量的构建错误.
有可能我没有正确配置m2eclipse吗?我该怎么检查?
这是我正在尝试构建的项目的github链接.我在这一行得到@Override构建错误.它说"方法createNewToken必须覆盖超类方法".
JTextArea messageDisplayArea=new JTextArea();
messageDisplayArea.addMouseListener(new MouseListener(){
public void mouseEntered(MouseEvent m){
JOptionPane.showMessageDialog(null,"a");
}
});
messageDisplayArea.addMouseListener(new MouseListener(){
public void mouseExited(MouseEvent m){
}
});
messageDisplayArea.addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent m){
}
});
messageDisplayArea.addMouseListener(new MouseListener(){
public void mousePressed(MouseEvent m){
}
});
messageDisplayArea.addMouseListener(new MouseListener(){
public void mouseReleased(MouseEvent m){
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的代码的一部分,我已经导入了java.awt。*和java.awt.event。*和javax.swing。*,但是尚未实现MouseListener接口。我已经从MouseListener接口重写了所有方法,但是编译器引发了5个错误,所有错误都表明该类不是抽象的,并且不重写MouseListener中的抽象方法。我究竟做错了什么?
java ×6
eclipse ×5
android ×3
annotations ×3
overriding ×3
abstract ×1
build-error ×1
button ×1
eclipse-rcp ×1
headless-rcp ×1
m2eclipse ×1
maven-2 ×1