2

我正在实现一个实现接口的java类。
问题是,此类中的方法必须是静态的,但在接口中我不能(众所周知)将方法声明为静态,如果我尝试在类中声明它,我会收到此错误:“这静态方法无法从 InterfaceName 隐藏实例方法”。

我在这个网站上搜索过,但没有找到任何解决方案,但建议说创建一个实现接口的抽象类,然后在类中扩展抽象类,但它不起作用。

有什么建议吗?

非常感谢大家!

4

1 回答 1

4

发布的链接 mvw(为什么我不能在 Java 接口中定义静态方法?)描述了不允许在接口中使用静态方法的原因以及为什么覆盖静态方法不是一个好主意(因此不允许)。

了解您想在什么情况下使用静态方法会很有帮助。如果您只想调用该类的静态方法,只需按照 andy256 的建议为其命名。如果你想从一个引用接口的对象调用它,你真的需要方法是静态的吗?

为了解决这个问题,我的建议是,如果你真的想调用与接口方法签名相同的静态方法,调用私有静态方法:

class MyClass implememts SomeInterface {

    @Override
    public int someMethod(int arg1, int arg2) {
        return staticMethod(arg1, arg2);
    }

    private static int staticMethod(int arg1, int arg2) {
        // TODO: do some useful stuff...
        return arg1 + arg2;
    }
}
于 2013-07-31T12:56:10.737 回答