第一步:maven添加jar (https://mvnrepository.com/artifact/org.javassist/javassist/3.28.0-GA)
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.28.0-GA</version>
</dependency>
第二步:
ppublic class TestAssist {
public static void main(String[] args) throws CannotCompileException, IOException, NotFoundException, InvocationTargetException, IllegalAccessException, InstantiationException, NoSuchMethodException {
// 获取默认的类池
ClassPool pool = ClassPool.getDefault();
// 在类池设置类
CtClass cc = pool.makeClass("com.dong.assist.TestUser");
// 设置 类的属性
CtField name = CtField.make("private String name;",cc);
CtField age = CtField.make("private int age;",cc);
cc.addField(name);
cc.addField(age);
// 设置类的方法
CtMethod setAll = CtMethod.make("public void setName(String name,int age){"
+"this.name = name; this.age = age;}",cc);
CtMethod getName = CtMethod.make("public String getName(){" +
"return this.name;}",cc);
cc.addMethod(setAll);
cc.addMethod(getName);
// 设置类的构造器(两个参数)
CtConstructor constructor = new CtConstructor(new CtClass[]{pool.get("java.lang.String"),CtClass.intType},cc);
// 构造器体,里面的参数用$1,$2代替
constructor.setBody("{this.name = $1;this.age=$2;}");
cc.addConstructor(constructor);
// 保存
cc.writeFile("D:\\TestUser");
System.out.println("ok");
// 反射,创建对象
Class clazz = cc.toClass();
Constructor constructor1 = clazz.getConstructor(String.class, int.class);
constructor1.setAccessible(true);
Object obj = constructor1.newInstance(new Object[]{"hello",50});
Method getNameMethod = clazz.getDeclaredMethod("getName");
System.out.println(getNameMethod.invoke(obj));
Method setName = clazz.getDeclaredMethod("setName",String.class,int.class);
setName.invoke(obj,"maohuidong",30);
System.out.println(getNameMethod.invoke(obj));
}
}
第三步:github下载xjad,反编译生成的TestUser (https://github.com/aspeople/xjad)
参考:https://blog.csdn.net/mousebaby808/article/details/37696371
https://www.bbsmax.com/A/Gkz10Me2dR/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能