我有以下探测 我有这些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
以使其按照我的意愿行事(如果有办法可以这样做)?
(标题既不是我的问题描述都不清楚,问题是我找不到更好的说法。我的道歉。)
感谢所有愿意回答的人。
答案 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