繁体   English   中英

在Java超类中使用groovy调用私有方法

[英]groovy call private method in Java super class

我有一个带有私有方法的抽象Java类MyAbstractClass MyConcreteClass有一个具体的实现。

public class MyAbstractClass {
    private void somePrivateMethod();
}

public class MyConcreteClass extends MyAbstractClass {
      // implementation details
}

在我的常规测试课中,我有

class MyAbstractClassTest {

    void myTestMethod() {
        MyAbstractClass mac = new MyConcreteClass()
        mac.somePrivateMethod()
    }
}

我得到一个错误,即somePrivateMethod没有这样的方法签名。 我知道groovy可以调用私有方法,但我猜测问题是私有方法是在超类中,而不是MyConcreteClass 有没有办法像这样调用超类中的私有方法(除了使用像PrivateAccessor这样的东西)?

谢谢Jeff

您可以调用私有方法的事实是Groovy语言中的错误 ,而不是一个功能。 但是,我认为在对闭包行为进行一些更改时,故意将此错误作为一种妥协方式引入。

即使你可以调用私有方法,你也不应该这样做,因为希望有一天这个bug会被修复,如果你的程序依赖于调用私有方法,那么它将被破坏。

如果你真的坚持(ab)使用这个未记录的行为,你可以尝试使用像ReflectionUtils这样的东西来调用父类中的私有方法。

另一种解决方法是在具体类中提供一个方法,该方法调用父类中的私有方法。 例如,以下代码“有效”,但仍依赖于访问私有成员,这很糟糕

class Parent {
  private foo() {println "foo"}
}

class Child extends Parent {
  public bar() {super.foo()}
}

new Child().bar()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM