在java的加载过程一般都是要预先定义java类,然后通过经过加载->连接->初始化三步。连接过程又可分为三步:验证->准备->解析。初始化的类是不允许修改。但是在日常的工作中有时候需要动态生成类,那第这种情况怎么办呢?
可以这么处理:
1、先定义一个空的类,仅作为动态生类的父类标识
public abstract class DynamicEntity { }
2、动态生成
/** * 动态生成类工具 */ public class ClassGenerator { private static final String BASE_CLASS = "com.dynamic.DynamicEntity"; public static Class<? extends DynamicEntity> generateClass(String className, List<Demo> fields) throws Exception{ ClassPool pool = ClassPool.getDefault(); CtClass ctClass = pool.makeClass(className); // 继承DynamicEntity ctClass.setSuperclass(pool.get(BASE_CLASS)); // 动态添加字段和getter/setter for (SelectColumnsModal field : fields){ String fieldName = field.getEngName().replaceAll("\\s", ""); // 指定数据类型 String type = "java.lang.String"; // 添加字段 CtField ctField = new CtField(pool.get(type), fieldName, ct