2013-07-31 261 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; 
    } 
}