bytebuddy:制作通用数组
bytebuddy: make array of generic
我想class:
class Clazz<T>{
T[] value;
}
TypeDescription.Generic t1 = TypeDescription.Generic.Builder.typeVariable("T").asArray().build();
new ByteBuddy().subclass(Object.class)
.typeVariable("T")
.defineField("value", t1, Modifier.PUBLIC)
.make()
但我遇到异常
Exception in thread "main" java.lang.IllegalStateException: A symbolic type variable does not imply an erasure: T
at net.bytebuddy.description.type.TypeDescription$Generic$OfTypeVariable$Symbolic.asErasure(TypeDescription.java:5802)
如何创建 T[] 字段?
你不能。但是,如果你愿意,你可以这样做:
Object[] value = new Object[];
然后访问时:
T t = (T) value[index];
我发现一个可行的选项是使用 class Clazz<T>
中的字段作为定义新字段的原型:
Unloaded<Object> cls = new ByteBuddy().subclass(Object.class).typeVariable("T")
.defineField("value", Clazz.class.getDeclaredFields()[0].getGenericType(), Modifier.PUBLIC);
您偶然发现了一个错误。 Byte Buddy 尝试解析 TargetType
引用以识别检测类型的 self 类型 ,这对于通用数组没有正确完成。将在下个版本1.10.11修复。
我想class:
class Clazz<T>{
T[] value;
}
TypeDescription.Generic t1 = TypeDescription.Generic.Builder.typeVariable("T").asArray().build();
new ByteBuddy().subclass(Object.class)
.typeVariable("T")
.defineField("value", t1, Modifier.PUBLIC)
.make()
但我遇到异常
Exception in thread "main" java.lang.IllegalStateException: A symbolic type variable does not imply an erasure: T
at net.bytebuddy.description.type.TypeDescription$Generic$OfTypeVariable$Symbolic.asErasure(TypeDescription.java:5802)
如何创建 T[] 字段?
你不能。但是,如果你愿意,你可以这样做:
Object[] value = new Object[];
然后访问时:
T t = (T) value[index];
我发现一个可行的选项是使用 class Clazz<T>
中的字段作为定义新字段的原型:
Unloaded<Object> cls = new ByteBuddy().subclass(Object.class).typeVariable("T")
.defineField("value", Clazz.class.getDeclaredFields()[0].getGenericType(), Modifier.PUBLIC);
您偶然发现了一个错误。 Byte Buddy 尝试解析 TargetType
引用以识别检测类型的 self 类型 ,这对于通用数组没有正确完成。将在下个版本1.10.11修复。