繁体   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