关于java:调用抽象类的私有方法

Invoking Private Methods of an Abstract Class

本问题已经有最佳答案,请猛点这里访问。

我有一个要求,我必须调用抽象类的私有方法。

假设抽象类如下所示: -

1
2
3
4
5
6
7
8
public abstract class Base {

    protected abstract String getName();

    private String getHi(String v) {
        return"Hi" + v;
    }
}

有些人可以告诉我有没有办法可以调用getHi(可能是通过Reflection或其他方式),以便我可以测试出来? 我正在使用Junit 4.12Java 8

我已经解决了这个问题,但这里的方法在抽象类中并不是私有的。

我也经历过这个问题,即使这个问题也没有谈到抽象类中的私有方法。

我不是在这里问我们是否应该测试私有方法或者测试私有方法的最佳策略是什么。 网上有很多关于此的资源。 我只是想问一下如何在java中调用抽象类的私有方法。


我能够调用抽象类的私有方法,如下所示: -

假设我有一个扩展Abstract基类的类: -

1
2
3
4
5
public class Child extends Base {
  protected String getName() {
     return"Hello World";
  }
}

然后我可以调用如下的私有方法: -

1
2
3
4
5
6
7
8
9
Child child = new Child();
try {
        Method method = Base.class.getDeclaredMethod("getHi", String.class);
        method.setAccessible(true);
        String output = (String) method.invoke(child,"Tuk");
        System.out.println(output);
    } catch (Exception e) {
        e.printStackTrace();
    }