gpt4 book ai didi

Javassist 和命名内部类

转载 作者:行者123 更新时间:2023-11-30 11:11:39 31 4
gpt4 key购买 nike

我对 javassist 有点问题,用方法处理程序装饰类。问题是方法处理程序与 Abc 类中的 method1 一起正常工作,但不会拦截对 Def 内部类中的 method2 的调用。

public class Abc {

Def def;

public Abc() {
this.def = new Def();
}

public void method1() {}

public static class Def {

public void method2() {}
}
}

简单的 javassist 处理

ProxyFactory factory = new ProxyFactory();
factory.setSuperclass(Abc);
Class<?> clazz = factory.createClass();
MethodHandler handler = new MethodHandler() {

@Override
public Object invoke(final Object self, final Method overridden, final Method forwarder, final Object[] args)
throws Throwable {
...
}
};
ProxyObject instance = (ProxyObject) clazz.newInstance();
instance.setHandler(handler);
return (Abc) instance;

我怎样才能使我的处理程序方法也捕获方法 2 调用?

谢谢。

最佳答案

内部类只不过是定义两个类的语法糖,在您的例子中,一个名为 Abc,另一个名为 Abc$Def。为了代理 Def 类的 method2,您需要像代理 Abc 类一样代理它。

我假设您正在 Abc 类中的某处创建一个 Def 实例,并希望代理创建的实例的方法。在这种情况下,在 Abc 中创建一个 factroy 方法并检测该工厂方法以返回 Def 的代理。

关于Javassist 和命名内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27316302/

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