【发布时间】: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 专家,但您似乎可以通过使其泛型来欺骗编译器,并且编译器假定它已重载。我的理解是重载不考虑返回类型。但是,在这种情况下,情况并非如此。