在静态方法中创建接口中的实现实例?

时间:2016-12-11 18:43:50

标签: java reflection constructor interface static-methods

最近我尝试创建这样的东西:使用静态方法创建接口,该方法将返回实现该接口的类的实例。实现类将具有私有构造函数,接口将通过反射创建该类的实例。示例代码:

static Implementation getImplementation(){
    Constructor<Implementation> constructor = Implementation.class.getDeclaredConstructor();
    constructor.setAccessible(true);
    return constructor.newInstance();
}

我省略了异常处理。 这个代码是出于某种目的的任何机会都有效,还是只是可怕的反模式?

1 个答案:

答案 0 :(得分:0)

这通常使用抽象ImplementationFactory来完成,它提供了一个静态方法,如

public static ImplementationFactory newInstance() { ... }

ImplementationFactory然后有一个类似Implementation newInstance()的方法。

例如,请参阅TransformerFactory.newInstance

有不同的方法来实现这一点。就像从META-INF/services下的某个资源中读取实现类的名称一样。