2013-07-31 198 views
0

我正在实现一个实现接口的java类。
poi是,这个类中的方法必须是静态的,但在接口中我不能(如已知)将方法声明为静态方法,并且如果我试图在类中声明它,则会出现此错误: “这个静态方法不能从InterfaceName隐藏实例方法”。如何在实现接口的类中实现静态方法?

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

有什么建议吗?

非常感谢大家!

+0

或者使用不同的名称或不同参数列表。 – andy256

+1

你是否必须重写静态方法?我不认为这是甚至允许在java – Breavyn

+2

http://stackoverflow.com/questions/512877/why-cant-i-define-a-static-method-in-a-java-interface – mvw

回答

1

链接mvw发布(Why can't I define a static method in a Java interface?)描述了不允许在接口中使用静态方法的原因,以及为什么重载静态方法i不是一个好主意(因此不允许)。

这将有助于了解您想使用静态方法的情况。如果你只是想调用这个类的一个静态方法,只要给它一个和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; 
    } 
}