Java 中是否有可能“重写”超类的私有方法?
我希望重写其方法的类是第三方类,因此我无法修改源代码。如果有某种方法可以反射性地在类上设置方法,那就太理想了。
或者,如果可以拦截第三方类的私有方法,那么这将是合适的。
YES。你可以这样做AspectJ https://www.eclipse.org/aspectj/。这不是真正的覆盖,但结果将是这样。
这是你的超级班级;
public class MySuperClass {
private void content(String text) {
System.out.print("I'm super " + text);
}
public void echo() {
content("!");
}
}
创建一个包含类似方法的接口;
public interface Content {
void safeContent(String text);
}
创建一个方面,强制超类实现该接口并添加一个周围顾问来调用它。
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 并实现该接口的子类。
public class Overrider extends MySuperClass implements Content {
public void safeContent(String text) {
System.out.print("Not that super " + text);
}
}
现在,如果您构造一个 Overrider 对象并调用 echo 方法,您将获得 Overriders safeContent 方法的输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)