首页 > 解决方案 > 访问涉及嵌套私有方法的覆盖函数的公共变量

问题描述

如果涉及嵌套的私有方法,有什么方法可以访问被覆盖类的变量?

特别是,我想知道执行重命名函数后 String foo 在类 B 中的值(参见下面的示例)。我不打算更改 A 类代码的任何功能,这仅仅是关于以某种方式获取值。

我可以自由编辑 B 类,但如果真的没有其他方法可以实现这一点,那么更改 A 类对我来说只是一种选择。

public abstract class A {
  protected void methodA() {
     String foo = "bla";
     foo = renameFunction(foo);
  }

  private String renameFunction(String incString)
  {
     return incString + "blub";
  }
}

public class B extends A {
  private String bar;

  @Override
   private void methodA() {
     String foo = "bla";
     foo = renameFunction(foo); //will not work as it's private
     this.bar = foo;
  }
}

标签: javajava-8

解决方案


不。由于 foo 是方法内部的变量,它甚至不是 A 上的字段,因此它只存在于doSomthing' 的执行范围内,不能从外部访问(不能从 B 或 A 访问)。

只有通过反射才能调用私有方法,除非您希望在单元测试或类似的东西中使用它,否则不建议这样做


推荐阅读