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();