通过反射或其他方式覆盖Java final方法?

尝试编写测试用例时会出现此问题。Foo是框架库中的类,我没有源访问权限。

public class Foo{

public final Object getX(){

...

}

}

我的申请将

public class Bar extends Foo{

public int process(){

Object value = getX();

...

}

}

由于其他依赖关系,我无法创建Foo对象,因此单元测试用例无法初始化。BarTest会抛出一个null指针,因为value为null。

public class BarTest extends TestCase{

public testProcess(){

Bar bar = new Bar();

int result = bar.process();

...

}

}

有没有一种方法可以使用反射API将getX()设置为非最终值?或者我应该如何进行测试?

回答:

您可以创建另一个可以在测试中覆盖的方法:

public class Bar extends Foo {

protected Object doGetX() {

return getX();

}

public int process(){

Object value = doGetX();

...

}

}

然后,您可以在BarTest中覆盖doGetX。

以上是 通过反射或其他方式覆盖Java final方法? 的全部内容, 来源链接: utcz.com/qa/407503.html

回到顶部