首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javassist异常

javassist异常
EN

Stack Overflow用户
提问于 2012-12-30 23:28:23
回答 1查看 467关注 0票数 1
代码语言:javascript
复制
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;
    }
}

如果我打开注释块,上面的代码运行得很好。但是如果像上面那样运行,它将抛出异常,这是java.lang.StackOverflowError。我不知道为什么,谁能给我解释一下?非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-31 03:12:41

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14091942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档