微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决通过反射或其他方式覆盖Java final方法?

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

public class Bar extends Foo {
  protected Object doGetX() {
    return getX();
  }
  public int process(){
    Object value = doGetX();
    ...
  }
}

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

解决方法

尝试编写测试用例时会出现此问题。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()设置为非最终值?或者我应该如何进行测试?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。