gpt4 book ai didi

Java Reflect/AOP 覆盖父类(super class)型私有(private)方法

转载 作者:行者123 更新时间:2023-12-01 08:18:26 25 4
gpt4 key购买 nike

是否有可能在 Java 中“覆盖”父类(super class)的私有(private)方法?

我希望覆盖其方法的类是第三方类,因此我无法修改源。如果有某种方法可以反射性地设置类上的方法,那将是理想的。

或者,如果可以拦截第三方类的私有(private)方法,那么这将是合适的。

最佳答案

是的。你可以用aspectj来做。这不是真正的覆盖,但结果会如此。

这里是你的 super 类;

public class MySuperClass {

private void content(String text) {
System.out.print("I'm super " + text);
}

public void echo() {
content("!");
}
}

创建一个包含类似方法的接口(interface);

public interface Content {
void safeContent(String text);
}

创建一个方面,强制父类(super class)实现该接口(interface)并添加一个环绕顾问来调用它。

public privileged aspect SuperClassAspect {

void around(MySuperClass obj)
: execution(* content(String)) && target(obj) {

Object[] args = thisJoinPoint.getArgs();
((Content) obj).safeContent((String) args[0]);
}

// compiler requires
public void MySuperClass.safeContent(String text) {}


declare parents :MySuperClass implements Content;
}

创建扩展 super 并实现该接口(interface)的子类。

public class Overrider extends MySuperClass implements Content {

public void safeContent(String text) {
System.out.print("Not that super " + text);
}
}

现在如果你构造一个 Overrider 对象并调用 echo 方法,你将得到 Overriders safeContent 方法的输出。

关于Java Reflect/AOP 覆盖父类(super class)型私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4439868/

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