首页 > java > java如何动态重写一个类到方法??

java如何动态重写一个类到方法??

作者:bin

首先我们定义一个类用于测试:

创建文件:BenClass.java

public class BenClass {
    public String toString(){
        return "原方法";
    }
}

创建@Test方法:

    @Test
    public void trest() throws Exception{
        String className = "BenClass";
        ClassPool pool = ClassPool.getDefault();
        CtClass ctClazz = pool.get(className);
        //找到原来到类
        CtMethod method = ctClazz.getDeclaredMethod("toString");

        //定义一个新方法,将老方法复制到新方法
        CtMethod newMethod = CtNewMethod.copy(method, ctClazz, null);

        //新方法设置方法内容
        newMethod.setBody("return \"toString方法已被重写\";");

        //删掉老方法
        ctClazz.removeMethod(method);

        //将新方法放入类中
        ctClazz.addMethod(newMethod);

        //重新编译类,该操作会冻结当前类
        Class<?> clazz = ctClazz.toClass();

        //解冻
        ctClazz.defrost();

        //测试我们的修改
        BenClass benClass = new BenClass();
        System.out.println("重构后的方法输出:" + benClass.toString());
    }
}

输出结果

$ 重构后的方法输出:toString方法已被重写

您必须 [ 登录 ] 才能发表留言!