如何从方法创建实现接口的类的实例?

时间:2017-10-28 19:51:42

标签: java

我有以下探测 我有这些Java类:

class A {
    B makeB() {
        return new B();
    }
}

class B implements X {
    // X methods implementations (plus other methods)
}

interface X {
    // methods declarations
}

出于测试目的,我需要修改方法makeB,以便它可以为实现X接口的每个类创建一个新实例。

我尝试使用泛型:

class A<T extends X> {
    X makeB() {
        return new T();
    }
}

但此代码不正确。 我也尝试过以下方式:

class A {
    X makeB() {
        return X.createInstance();
    }
}

class B implements X {
    @Override
    public static X createInstance() {
        return new B();
    }
    // X methods implementations (plus other methods)
}

interface X {
    static X createInstance() {}
    // other methods declarations
}

但Java不支持覆盖静态方法。

如何更改makeB以使其按照我的意愿行事(如果有办法可以这样做)?

(标题既不是我的问题描述都不清楚,问题是我找不到更好的说法。我的道歉。)

感谢所有愿意回答的人。

2 个答案:

答案 0 :(得分:0)

查看Mockito单元测试框架,它允许您模拟(覆盖/重新定义)方法实现。

另请参阅dependency injection模式,以帮助解决此类问题。

答案 1 :(得分:0)

泛型可能是更好的方法。您的通用代码在语法上是不正确的。试试这个:

class A<T extends X> {
    T makeB() {
        return new T();
    }
}

来源:https://docs.oracle.com/javase/tutorial/java/generics/types.html