bytebuddy: 制作通用的

问题描述 投票:2回答:2

我想做类。

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[]字段?

java byte-buddy
2个回答
1
投票

你发现了一个错误。字节兄弟试图解决 TargetType 引用来识别工具类型的 自型 这对于通用数组来说是不正确的。这将在下一个版本1.10.11中得到修正。


0
投票

你不能这样做。但是,如果你愿意,你可以这样做。

Object[] value = new Object[];

然后在访问它的时候,

T t = (T) value[index];

0
投票

我发现一个可行的方法就是在类中使用字段。Clazz<T> 作为一个原型来定义新的字段。

Unloaded<Object> cls = new ByteBuddy().subclass(Object.class).typeVariable("T")
            .defineField("value", Clazz.class.getDeclaredFields()[0].getGenericType(), Modifier.PUBLIC);
© www.soinside.com 2019 - 2024. All rights reserved.