一个接口具有两个具有相同名称但不同签名的方法

One interface with two methods having same name but different signature

我有 一个 接口,构建并提供为 jar,java src,目标 = 1.5

interface IGetter {
   int getInternalID(final long externId);
   int getInternalID(long externId, char specifier);
}

我在 java 1.8 中实现了一个内部静态 class 实现这个接口

public static Calculator {
...
    public static class LookupTable implements IGetter {
                /* (non-Javadoc)
                 * @see com.mycompany.IGetter#getInternalID(long)
                 */
                @Override
                public int getInternalID(long externId) {
                   ....
                   return internId;
                }

                /* (non-Javadoc)
                 * @see com.mycompany.IGetter#getInternalID(long, char)
                 */
                @Override   <-- Here compiler error; This method is not detected
                as beeing in the interface.
                public int getInternalID(long externalId, char specifier) {
                    return ...;
                }
    }
}

第二个 getInternal(long, char) 方法未被编译器检测为接口方法。

点击包含接口的jar文件,甚至eclipse中的class查看器,在方法概览的左窗格中显示该方法丢失,而在编辑器视图中显示方法在接口中实现。

怎么了,是不是一个接口中的两个方法不能重名?
为什么java编译器编译接口? (源和目标 = java 1.5)
为什么java 1.8 编译不识别为接口方法。 (来源和目标 1.8)

编译器错误是:类型 Calculator.LookupTable 的方法 getInternalID(long, char) 必须覆盖或实现超类型方法 Calculator.java

原因是类路径中有另一个jar文件是用旧版本的IGetter接口编译的。

感谢网友purring pigeon,问我是否确定导入了正确的界面

因为您正在使用 Java 5,所以您不能使用 @Override 注释。它不适用于任何低于 Java6 的版本。这就是为什么注释在旧版本中是可选的,因为如果它是强制性的,它将破坏向后兼容性。

在 Java 5:@Override 注释仅引用 superclasses。

在Java 6+:中,@Override注解引用了超classes和实现的方法。

您的代码出错,因为在 Java 5 中,这不是您在 class 中实现的方法的有效注释。删除它并重新编译。