ByteBuddy—生成一些类

1、动态生成一些继承自List的类

public <T,V extends List<T>> V deSerialize(byte[] bytes,Class<?> listClass,Class<T> genericClass) {
    try {
        Class<?> dynamicListClass = new ByteBuddy()
                .subclass(listClass) // 动态生成实现了 List 接口的类
                .make()
                .load(ListParse.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
                .getLoaded();
        V a = (V) dynamicListClass.getDeclaredConstructor().newInstance();
        return a;
    } catch (Exception e) {
        return null;
    }
}

调用

LinkedList<String> a = ListParse.INIT.deSerialize(null,LinkedList.class,String.class);
a.add("wfwfwf");
a.add("gojoeeg");

for(int i=0;i<a.size();i++){
    System.out.println(a.get(i));
}

2、注解相关

public byte[] serialize(Object bean){
    TypeDescription typeDefinition = new ByteBuddy()
            .redefine(bean.getClass())
            .make()
            .getTypeDescription();

    FieldList<FieldDescription.InDefinedShape> fieldList = typeDefinition.getDeclaredFields();

    for(FieldDescription.InDefinedShape field : fieldList){
      ......
    }
}

(1)、判断field是否包括指定的注解

field.getDeclaredAnnotations().isAnnotationPresent(QBeanField.class)

(2)、获取注解的值

for(FieldDescription.InDefinedShape field : fieldList){
    AnnotationDescription description = field.getDeclaredAnnotations().ofType(QBeanField.class);
    if(description != null){
        System.out.println(description.getValue("index"));
    }
}

3、定义泛型类

            Class<? extends T> dynClass = new ByteBuddy()
                    .subclass(tClass)
                    .make()
                    .load(BeanParse.class.getClassLoader())
                    .getLoaded();
            t = dynClass.getDeclaredConstructor().newInstance();