gpt4 book ai didi

java - groovy 调用 Java 父类(super class)中的私有(private)方法

转载 作者:搜寻专家 更新时间:2023-11-01 01:38:50 25 4
gpt4 key购买 nike

我有一个带有私有(private)方法的抽象 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 可以调用私有(private)方法,但我猜问题是私有(private)方法在父类(super class)中,而不是 MyConcreteClass。有没有办法像这样在父类(super class)中调用私有(private)方法(除了使用像 PrivateAccessor 这样的方法)?

谢谢杰夫

最佳答案

可以调用私有(private)方法的事实是a bug in the Groovy language ,不是特征。但是,我相信这个错误是在对闭包行为方式进行一些更改时作为一种妥协形式故意引入的。

尽管您可以调用私有(private)方法,但您不应该这样做,因为希望有一天这个错误会被修复,如果您的程序依赖于调用私有(private)方法,它就会被破坏。

如果您真的坚持(ab)使用这种未记录的行为,您可以尝试使用类似 ReflectionUtils 的东西调用父类中的私有(private)方法。

另一种解决方法是在具体类中提供一个调用父类中私有(private)方法的方法。例如,下面的代码“有效”,但它仍然依赖于访问私有(private)成员,这是不好的

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

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

new Child().bar()

关于java - groovy 调用 Java 父类(super class)中的私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2834700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com