【问题标题】:One interface with two methods having same name but different signature一个接口,两个方法同名但签名不同
【发布时间】:2015-11-02 17:03:45
【问题描述】:

我有一个接口,构建并提供为 jar、java src 和 target = 1.5

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

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

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中的类查看器,在方法概述的左侧窗格中显示该方法丢失,而在编辑器视图中显示该方法已在接口中实现.

怎么回事,接口中的两个方法不能同名吗?
java编译器为什么要编译接口? (src 和目标 = java 1.5)
为什么java 1.8编译不承认它是接口方法。 (源和目标 1.8)

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

【问题讨论】:

  • 您确定要导入正确的界面吗?
  • return ...; 是什么,是伪代码吗?
  • ... 是伪代码,@Henson:参数的名称不是签名的一部分
  • @purring hm 我在 claspath 中有另一个 jar,它可能是用这个 IGetter 的旧版本编译的

标签: java interface method-signature


【解决方案1】:

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

感谢用户purring pigeon,他的问题是我是否确定我导入了正确的界面。

【讨论】:

    【解决方案2】:

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

    在 Java 5 中: @Override 注释仅指超类。

    在 Java 6+ 中:@Override 注释指的是超类和实现的方法。

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

    【讨论】:

    • 这不是原因。编译器是java 1.8,lib是1.5,看我的自我回答:原因是lib的旧版本。
    猜你喜欢
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2011-12-13
    • 2011-01-23
    • 2015-03-23
    • 2013-01-19
    • 1970-01-01
    • 2017-12-19
    相关资源
    最近更新 更多