Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @重写编译错误,实现接口(eclipse jdk1.6.0_23 linux)_Java_Linux_Eclipse_Compiler Errors_Jdk1.6 - Fatal编程技术网

Java @重写编译错误,实现接口(eclipse jdk1.6.0_23 linux)

Java @重写编译错误,实现接口(eclipse jdk1.6.0_23 linux),java,linux,eclipse,compiler-errors,jdk1.6,Java,Linux,Eclipse,Compiler Errors,Jdk1.6,当对实现接口的类使用@Override注释时,我在eclipse中遇到编译错误 编译器符合性级别设置为Java 6.0 我使用的是6.0 jdk的最新版本 错误: “类型为{classname}的方法{methodname}必须重写超类方法” 同样的代码在配置类似的mac上也能正常工作 public interface ChannelIF { ... public boolean canSendNarrowcast(); public boolean canSendBroadca

当对实现接口的类使用@Override注释时,我在eclipse中遇到编译错误

编译器符合性级别设置为Java 6.0

我使用的是6.0 jdk的最新版本

错误: “类型为{classname}的方法{methodname}必须重写超类方法”

同样的代码在配置类似的mac上也能正常工作

public interface ChannelIF {
...
    public boolean canSendNarrowcast();
    public boolean canSendBroadcast(); 
}

public class FacebookChannel implements ChannelIF 
{
...
    @Override
    public boolean canSendNarrowcast() { return true; }

    @Override
    public boolean canSendBroadcast() { return true; }
}

听起来你的方法签名不匹配。它们必须相同,包括抛出检查异常之类的内容。发布你的代码

此功能仅在Java 6及更高版本中有效。我看到您正在使用JDK1.6。那很好。可能原因:您正在使用
-source 1.5
进行编译。是这样吗?如果是这样,能否将其更改为
-source 1.6

在eslipse中可以使用不同版本的编译器

请参阅eclipse首选项->Java->编译器“编译器符合性级别”中的配置。 您必须选择“1.6”。

检查运行库, 编译器设置可能不同

右键单击项目名称、属性、Java构建路径、库

看看JRE系统库的版本,很可能设置为1.5或更低。 选择JRE系统库,然后单击删除 单击添加库,选择JRE系统库,然后单击下一步
然后要么是工作区默认值,要么是

我刚刚发现,在使用maven时,我还需要修改pom.xml以拥有编译器插件。我已正确指定了所有设置,但我需要此设置:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <inherited>true</inherited>
      <configuration>
          <source>1.6</source>
          <target>1.6</target>
      </configuration>
    </plugin>
  </plugins>
</build>

org.apache.maven.plugins
maven编译器插件
真的
1.6
1.6

我有同样的问题大约一个小时,然后它似乎神秘地自行解决了。我希望我知道我做了什么。我从工作区设置设置为1.6开始,无意中将项目设置设置为1.5兼容。我发现了这一点,并将项目编译器设置更改为1.6,这解决了一些错误,但没有解决接口的@Override问题。以下各项的某些组合修复了此问题:

  • 将jre从jdk更改回Eclipse定制安装的jre(或者其他人,不是我)
  • 在编译器部分禁用特定于项目的设置,并在编译器的项目和工作区设置上单击“重置为默认值”
  • 退出Eclipse并以管理员身份重新运行它(我是从.zip而不是从安装程序将Eclipse复制到Windows上的程序文件中的;我认为它不能在不以管理员身份运行的情况下更改其配置文件,因为它是该文件夹的子文件夹,但我可能完全错了)

  • 一位同事显然通过完全卸载和重新安装所有java/eclipse相关组件解决了这个问题:

    所以,我一直有这个问题,在多次运行上述解决方案之后,看到我的java版本一直设置为1.7,而不是使用Maven,正如@jdowdell所建议的那样,退出并重新启动Eclipse几次之后,它似乎就可以工作了,直到下一次我实现其中一个。我意识到当我重新启动Eclipse时,它会提示我保存文件,我意识到我的接口没有保存,所以原来的方法(被重写的方法)在磁盘上不存在。这就是为什么退出并重新启动Eclipse可以解决这个问题


    tl;dr:检查您的所有文件是否已保存。

    我也面临问题,刚刚解决。
    在Project->right click->properties->Java Compiler中将“Compiler compliance level”更改为1.6。

    您得到的完整编译错误是什么?只是猜测一下。也许您只检查了工作区编译器的符合性级别(设置为6),但您的项目将其自身设置为jdk5。@Progman-编辑问题以包含错误string@GrzegorzOledzki-很好的建议。此项目继承了工作区默认设置(6)您使用的是Eclipse3.7里程碑还是夜间构建?可能这是最新eclipse中的回归。添加了代码示例。注意:代码在其他配置中编译良好。我认为这与我在linux中运行的jdk版本有关,或者与我的linux eclipse配置有关,我只是没有看到。我想你是对的,但是我在eclipse中应该在哪里检查这一点呢?eclipse中的编译器遵从性级别已经为eclipse设置为6.0(1.6):在project->Properties…>Java编译器,然后根据需要进行配置