簡體   English   中英

我如何確保通過接口實現公共靜態功能

[英]How do i ensure implementation of a public static function with interface

從Java 8開始,我們可以在接口中定義靜態和默認方法。 但是我需要確保在實現特定接口(例如interface A foo()所有類中都實現一個公共靜態方法foo() 我該怎么做,或者有可能嗎?

接口A:

package com.practice.misc.interfacetest;

public interface A {
    public static Object foo(); //Eclipse shows error : 'This method requires a body instead of a semicolon'
    String normalFunc();
}

B級:

package com.practice.misc.interfacetest;

public class B implements A{

    @Override
    public String normalFunc() {
        return "B.normalFunc";
    }
//I need to ensure that I have to define function foo() too

}

C級:

package com.practice.misc.interfacetest;

public class C implements A{

    @Override
    public String normalFunc() {
        return "C.normalFunc";
    }
//I need to ensure that I have to define function foo() too

}

編輯1:實際情況:

我在所有實現的類中都有一個公共靜態方法getInstance() (返回該類的Singleton實例),並且我想確保其他開發人員編寫的所有將來的類都必須在其類中實現該靜態方法。 我可以通過從接口的靜態方法調用getInstance()方法來簡單地使用反射來返回該實例,但是我想確保每個人都在所有實現類中實現getInstance()

接口的靜態方法不會被繼承(1)。 如果是類,它們是繼承的,但是您不能覆蓋它們(2); 因此,您要做的實際上是不可能的。

如果你希望所有類來實現你的方法,為什么不干脆讓abstract (和隱含public )首先,讓每個人都被強制執行。

尤金已經指出,靜態方法不能被覆蓋。 我建議您將單例行為提取到單獨的接口。 例如:

public interface A {
    String normalFunc();
}

public class B implements A {
    @Override
    public String normalFunc() {
        return "B.normalFunc";
    }
    // TODO add getInstance for singleton
}

public interface Singleton {
    // TODO extensive javadoc to describe expected singleton behavior
    A getInstance();
}

public class BSingleton implements Singleton {
    @Override
    public A getInstance() {
        return B.getInstance();
    }
}

最后,您可以使用BSingleton類型的任何對象來獲取B的單例對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM