如何在ByteBuddy中将Java Class<?>包装为TypeDefinition?
在ByteBuddy中将Class<?>转换为TypeDefinition的方法
ByteBuddy中TypeDefinition是顶层类型描述接口,TypeDescription(含泛型实现TypeDescription.Generic)均为其实现类,以下是两种直接可行的转换方式:
方法1:与现有泛型代码风格统一(使用TypeDescription.Generic.Builder)
直接通过type()方法传入Class对象构建,完美匹配你处理重复字段的代码逻辑:
private TypeDefinition getFieldAndType(FieldEntry entry){ var typeClass = String.class; if(entry.getModifier() == FieldModifierEnum.REPEATED){ return TypeDescription.Generic.Builder .parameterizedType(ArrayList.class, typeClass).build(); } // 将Class<?>包装为TypeDefinition的核心代码 return TypeDescription.Generic.Builder.type(typeClass).build(); }
方法2:更简洁的直接转换(使用TypeDescription.ForLoadedType)
如果不需要构建泛型结构,可直接通过ForLoadedType.of()获取已加载类的类型描述(该类实现了TypeDefinition接口):
private TypeDefinition getFieldAndType(FieldEntry entry){ var typeClass = String.class; if(entry.getModifier() == FieldModifierEnum.REPEATED){ return TypeDescription.Generic.Builder .parameterizedType(ArrayList.class, typeClass).build(); } return TypeDescription.ForLoadedType.of(typeClass); }
两种方式均符合ByteBuddy的API规范,可根据代码风格选择使用。
内容的提问来源于stack exchange,提问作者Styp
相关产品推荐
相关产品推荐

