写在前面
源码 。
本文看下如何使用javassist来定义属性。
1:程序
package com.dahuyou.javassist.generateFieldAndMethod;
import javassist.*;
import java.lang.reflect.Method;
public class JustDoIt111 {
public static void main(String[] args) throws Exception {
ClassPool pool = ClassPool.getDefault();
CtClass ctClass = pool.makeClass("com.dahuyou.javassist.generateFieldAndMethod.generateFieldAndMethod_javassist");
// 创建属性字段 double 原始类型
CtField ctField1 = new CtField(CtClass.doubleType, "var1", ctClass);
ctField1.setModifiers(Modifier.PRIVATE + Modifier.STATIC + Modifier.FINAL);
ctClass.addField(ctField1, "3.14");
// 创建属性字段 double 对象类型 需要使用 pool.get(Double.class.getName()) 来指定数据类型
CtField ctField2 = new CtField(pool.get(Double.class.getName()), "var2", ctClass);
ctField2.setModifiers(Modifier.PUBLIC);
ctClass.addField(ctField2, "62.3");
// 创建属性字段 Object 对象类型 需要使用 pool.get(Double.class.getName()) 来指定数据类型
CtField ctField3 = new CtField(pool.get(Object.class.getName()), "var3", ctClass);
ctField3.setModifiers(Modifier.STATIC);
ctClass.addField(ctField3);
CtField ctField4 = new CtField(CtClass.intType, "var4", ctClass);
ctField4.setModifiers(Modifier.FINAL);
ctClass.addField(ctField4, "44");
ctClass.writeFile();
}
}
对象类型的话需要使用pool.get(XX.class.getName())
,基础数据类型的话直接使用CtClass.xxxType
即可,运行一下: