【问题标题】:Java/JRE version change, Errors in Eclipse and moreJava/JRE 版本更改、Eclipse 中的错误等
【发布时间】:2012-06-19 05:33:35
【问题描述】:

这可能是一个非常愚蠢的问题,但请耐心等待,因为我是 Java/J2EE 的新手。我已经在我的机器上安装了 JRE6 和 JRE7。我已将 JAVA_HOME 环境变量设置为指向我的 JRE6 目录。此外,在我的日食中,我已经将工作的 JRE 指向了 JRE6。但是,如果在终端中运行“java -version”,它会显示当前的 java 版本是 1.7(指向 JRE7)。

我实际面临的问题是 eclipse 给了我以下接口的错误:-

public interface IServiceHelper {
    public <T extends Document> Document SomeMethod(Object obj);

          // Error - Duplicate method SomeMethod(Object) in type IServiceHelper
    public <T extends SomeClass> SomeClass SomeMethod(Object obj);  

          // Error - Duplicate method SomeMethod(Object) in type IServiceHelper
    public <T extends String> String SomeMethod(Object obj);
}

但是,在终端中在 Eclipse 之外构建 maven 会成功。

上面的界面可能不是一个好的设计,可能真的是一些棘手的代码。由于这是一段现有的代码,我不应该进行更改。请帮我找出 eclipse 和/或 JRE 版本有什么问题。

【问题讨论】:

  • 确切的错误消息是“IServiceHelper 类型中的重复方法 SomeMethod(Object)”。
  • 虽然我所知道的所有来源都指向JRE6,但错误是由于JRE7。如果这不正确,那么错误的根源是什么?顺便说一句,我的对手机器上没有错误并且代码工作正常(使用 Eclipse 和 JRE6)
  • 我真的不明白这怎么可能编译:你在同一个接口中定义了三个具有相同签名的方法。
  • 但它确实可以在我对方的机器上编译和运行。我不是 Java 专家,但您似乎可以通过使其泛型来欺骗编译器,并且编译器假定它已重载。我的理解是重载不考虑返回类型。但是,在这种情况下,情况并非如此。

标签: eclipse java


【解决方案1】:

这里有几件事:

  1. 我假设您使用的是 Windows。请参阅此线程以了解为什么它会忽略您的 JAVA_HOME - Windows ignores JAVA_HOME: how to set JDK as default?
  2. 在 Java 中禁止使用具有不同返回类型的相同方法名称和参数,请参阅此处的讨论 so in java you can't have duplicate method names with different return and params?
  3. 您的 Maven 构建工作正常吗?有趣的。您可以在构建、构建调试和共享结果之前运行“干净”吗?

【讨论】:

  • Point 很有用,为了测试,我用 Java 1.6 二进制文件替换了 System32 文件夹中的二进制文件。它按预期工作。然而,第 2 点似乎仅在理论上是正确的。如上所述,我的对应机器也不会在 eclipse 中报告错误。甚至使用 Java 1.6 编译器构建的 Maven 也可以正常工作。那么如何让它也可以与 eclipse 一起使用呢?
  • Java 语言规范中备份了第二项:docs.oracle.com/javase/specs/jls/se5.0/html/classes.html#8.4.2 在一个类中声明两个具有覆盖等效签名(定义如下)的方法是编译时错误。如果两个方法具有相同的名称和参数类型,则它们具有相同的签名。
【解决方案2】:

如果您的机器上的 Java 版本混乱,您可以轻松设置将使用哪个 Java eclipse。 编辑文件 /eclipse.ini 添加: -vm PATH_TO_YOUR_JAVAW_EXECUTABLE

来自 Eclipse 常见问题解答: 如果 eclipse/jre 目录下安装了 JVM,Eclipse 会使用它;否则启动器将查询 eclipse.ini 文件和系统路径变量。 Eclipse 不会查询 JAVA_HOME 环境变量。

要明确指定您选择的 JVM,您可以使用 -vm 命令行参数:

eclipse -vm c:\jre\bin\javaw.exe ''通过执行指定的java可执行文件启动Java

http://wiki.eclipse.org/FAQ_How_do_I_run_Eclipse%3F

【讨论】:

  • Eclipse JRE 问题在某种程度上得到了解决。那么如何编译它(有问题的代码)?
  • 我还没有尝试编译该代码。首先 - 检查你在命令行和 Eclipse 中是否有相同的 JRE(使用你的 Eclipse 运行的 JRE 帮助 -> 关于 -> 安装详细信息 -> 配置)和这里重要的是什么 - 你设置了什么 JDK编译项目时使用的 Eclipse。查看 Eclipse 设置:转到 Eclipse Preferences -> Java -> Installed JREs。还要检查 Eclipse 首选项和 PROJECT SETTINGS 中的编译级别,因为您可以覆盖项目级别的全局设置。
  • 是的,JRE 版本相同。但是编译问题依然存在。
猜你喜欢
  • 1970-01-01
  • 2014-10-29
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多