gpt4 book ai didi

javassist异常

转载 作者:行者123 更新时间:2023-12-01 04:56:13 25 4
gpt4 key购买 nike

public class PracticeJavassist2 {
@Test
public void test2() throws InstantiationException, IllegalAccessException{
ProxyFactory factory = new ProxyFactory();
factory.setSuperclass(JavassistClass.class);
// factory.setFilter(new MethodFilter() {
// public boolean isHandled(Method arg0) {
// if(arg0.getName().equals("getName")){
// return true;
// }
// return false;
// }
// });

Class<?> c = factory.createClass();
JavassistClass jc = (JavassistClass)c.newInstance();
((Proxy)jc).setHandler(new MethodHandler() {
public Object invoke(Object arg0, Method arg1, Method arg2, Object[] arg3)throws Throwable {
JavassistClass o = (JavassistClass)arg0;
o.setName("vincen");
System.out.println(o.getClass().getName());
return arg2.invoke(arg0, arg3);
}
});
System.out.println(jc.getName());

}

}

class JavassistClass{
private String name = "default";
public JavassistClass(){
name = "me";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

如果我打开注释 block ,上面的代码运行良好。但如果像上面那样运行,就会抛出异常,即java.lang.StackOverflowError。不知道为什么,谁能帮我解释一下?非常感谢。

最佳答案

调用o.setName("vincen"); 导致递归,换句话说,setName() 方法正在由其处理程序调用。只需删除该行即可。

关于javassist异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091942/

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