任何时候我必须将我的项目重新导入Eclipse(如果我重新安装Eclipse,或者更改了项目的位置),几乎所有重写的方法都没有正确格式化,导致错误:
该方法必须覆盖超类方法
值得注意的是,这是Android项目 - 无论出于何种原因,方法参数值并不总是填充,所以我必须自己手动填充它们.例如:
list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
//These arguments have their correct names
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
}
});
Run Code Online (Sandbox Code Playgroud)
最初将填充如下:
list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
//This methods arguments were not automatically provided
public void onCreateContextMenu(ContextMenu arg1, View arg2,
ContextMenuInfo arg3) {
}
});
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我删除我的代码,并让Eclipse自动重新创建方法,它使用我已经拥有的相同参数名称,所以我真的不知道问题在哪里,除此之外它自动格式化方法我.
这需要手动重新创建所有重写的方法,这变得非常痛苦.如果有人能解释为什么会发生这种情况或如何解决它......我会非常高兴.
也许这是由于我格式化方法的方式,这是在另一个方法的参数内?
使用Java @Override注释的最佳实践是什么?为什么?
使用@Override注释标记每个重写方法似乎有点过分.是否有某些编程情况需要使用@Override和其他不应该使用的@Override?
我有一个现有的项目,它使用@Override覆盖接口方法的方法,而不是超类方法.我不能在代码中改变这一点,但我想Eclpse停止抱怨的注解,因为我仍然可以使用Maven构建.
我该如何禁用此错误?
注意:由于项目要求,我需要编译Java 1.5.
注意:这似乎是"javac"程序中的限制.
我有需要为Java 5 JVM构建的Java 6代码.我之前使用javac ant目标(使用JDK编译器和ecj)的工作使我相信它只是设置javac的源和目标.因此这个pom.xml片段:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.5</target>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
它可以在Eclipse 3.7中使用Maven支持按预期工作.不幸的是,直接从命令行运行Maven给了我
javac: source release 1.6 requires target release 1.6
Run Code Online (Sandbox Code Playgroud)
与生成的相同javac -source 1.6 -target 1.5.为了澄清,这是Ubuntu的官方OpenJDK 6
x@JENKINS:~$ javac -version
javac 1.6.0_20
x@JENKINS:~$ javac -source 1.6 -target 1.5
javac: source release 1.6 requires target release 1.6
x@JENKINS:~$
Run Code Online (Sandbox Code Playgroud)
官方Oracle Java 7 JDK for Windows显示了相同的行为.
注意:我不想构建Java 5库或任何东西.只是活动的javac生成Java 5 兼容的字节码.
如何在仍然与Eclipse Maven插件兼容的同时获得我想要的内容?
(编辑:除了@Override我还想在Java 6中使用JAX-WS库进行编译时使用,但仍然生成Java 5字节代码 - 我可以在部署时故意在Web容器中添加JAX-WS库到Java 5安装)
编辑:事实证明maven-compiler-plugin可以被告知使用另一个编译器,Eclipse编译器可以这样做:
<plugin>
<!-- Using the eclipse compiler allows …Run Code Online (Sandbox Code Playgroud) 是否有一个静态分析工具可以一致地强制使用@Override注释,可以在IDE之外运行?CheckStyle有一个MissingOverride检查,但它只适用于使用@inheritDoc Javadoc标记的方法.我正在寻找一种可以在持续集成机器上的新构建配置中运行的工具.
我有一些使用Eclipse和Java 6 SDK编写的Java代码,因此实现接口的方法使用@Override- 注释在Java 6中是合法的,但在Java 5中不是.
我想使用Java 5 SDK(javac在Mac OS X 10.5上)编译相同的代码.除了@Override注释之外,所有内容都编译并运行良好.有什么方法可以让javac忽略@Override这个项目的注释,还是唯一能够将它们全部删除的解决方案?
出于某种原因,我的一个eclipse安装忽略了错误设置的@Override注释.例如,如果我放置@Override一个不被覆盖的方法,它就完全忽略它.
有关如何将其恢复到错误注释方法会显示错误的状态的任何想法?
终于等到了Android的Facebook SDK,以正确导入感谢之后这个,我发现,日食不承认的onclick倍率在FbDialog.java:
mCrossImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onCancel();
FbDialog.this.dismiss();
}
});
Run Code Online (Sandbox Code Playgroud)
它也不承认ServiceConnection的TokenRefreshServiceConnection实现中onServiceConnected和onServiceDisconnected的覆盖
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
messageSender = new Messenger(service);
refreshToken();
}
@Override
public void onServiceDisconnected(ComponentName arg) {
serviceListener.onError(new Error("Service disconnected"));
// We returned an error so there's no point in
// keeping the binding open.
mAuthActivity.unbindService(TokenRefreshServiceConnection.this);
}
Run Code Online (Sandbox Code Playgroud)
在警告中,所有三种方法都说该方法必须覆盖超类方法.我还没有修改过代码.我检查了Eclipse在相应的超类中识别出类型相同的类型,并且我尝试按control-shift-o来组织导入,这是针对类似问题在此答案中建议的修复.
这些覆盖是SDK的一部分,而不是任何单独的项目.我将项目设置为使用Android SDK 2.2,如Facebook的说明和4.0.3所示,从理论上讲,它应与所有以前的版本兼容.我还没有得到Facebook自己的代码.作为旁注,我可以使用一个罐子吗?它会使这更容易.
我想在我的项目中使用自定义注释.
如何配置maven 3来处理我的注释.AbstractProcessor类的注释和实现嵌入在我的应用程序中.
我的注释仅适用于测试(src/test/java).
状态注释:
@Target(ElementType.METHOD)
public @interface State {
boolean success() default true;
}
Run Code Online (Sandbox Code Playgroud)
TestAnnotationsProcessor:
@SupportedAnnotationTypes("com.*****.client.State")
public class TestAnnotationsProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
System.out.print("TESSST ANNOTATION");
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我不想把我的注释放在一个外部项目中......这将是愚蠢的,因为它真的取决于我的项目.
我怎样才能做到这一点 ?谢谢.
POM包含(如/sf/answers/1567929891/中所述):
<profile>
<id>compileWithJava5</id>
<!--
NOTE
Make sure to set the environment variable JAVA5_HOME
to your JDK 1.5 HOME when using this profile.
-->
<properties>
<java.5.home>${env.JAVA5_HOME}</java.5.home>
<java.5.libs>${java.5.home}/jre/lib</java.5.libs>
<java.5.bootclasspath>${java.5.libs}/rt.jar${path.separator}${java.5.libs}/jce.jar</java.5.bootclasspath>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
<compilerArguments>
<bootclasspath>${java.5.bootclasspath}</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>
</profile>
Run Code Online (Sandbox Code Playgroud)
$JAVA5_HOME 设置:
• echo $JAVA5_HOME
/usr/lib/jvm/jdk1.5.0_22
Run Code Online (Sandbox Code Playgroud)
据我所知,Java + Maven的神奇之处在于,它应该是maven-compiler-plugin指示JDK 1.8伪装成JDK 1.5并使用Java 5引导类路径的有效咒语.
根据为什么javac在@Override注释上失败,JDK 1.5将不允许接口的已 …
我有几个这样的覆盖方法:
@Override
public int compareTo(Property p) {
return getText().compareTo(p.getText());
}
Run Code Online (Sandbox Code Playgroud)
作为Java项目,它工作正常,但作为Maven项目,它返回以下错误:
The method compareTo(Property) of type Property must override a superclass method
Run Code Online (Sandbox Code Playgroud)
在研究了这个之后,我想我想把我的JRE系统库(jdk1.6_u25)作为我的POM文件中的依赖项,或者这是一个完全不同的问题?
非常感谢.
我的课程如下
public interface A {
public void doSomething();
}
public abstract class B implements A {
public void doOneMoreThing() {
// Do one more thing
}
}
public class C extends B {
@Override <---- Causes error
public void doSomething() {
// Do something
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我,为什么这个@Override注释会导致错误?
谢谢Nayn
java ×11
annotations ×4
eclipse ×4
maven ×4
android ×2
overriding ×2
facebook ×1
ide ×1
interface ×1
javac ×1
jdk1.5 ×1
superclass ×1
syntax-error ×1