首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ByteBuddy中创建数组的TypeDescryption

在ByteBuddy中创建数组的TypeDescryption
EN

Stack Overflow用户
提问于 2021-07-08 01:27:35
回答 1查看 21关注 0票数 0

我想在Byte-Buddy中创建这样的类:

代码语言:javascript
复制
class A{
   public B b;
}

class B{
 public A[] a_array;
}

这是我的代码,我想象它是如何做到的:

代码语言:javascript
复制
InstrumentedType arrayType = InstrumentedType.Default.of("[A", 
                        TypeDescription.Generic.Builder.rawType(Object.class).build(),
                        Modifier.PUBLIC);

        DynamicType.Unloaded B_made = new ByteBuddy()
                .subclass(Object.class)
                .name("B")
                .defineField("a_array", arrayType, Modifier.PUBLIC)
                .make();


        DynamicType.Unloaded A_made = new ByteBuddy()
                .subclass(Object.class)
                .name("A")
                .defineField("b", B_made.getTypeDescription(), Modifier.PUBLIC).make();

        Class A = A_made.include(B_made).load(Test.class.getClassLoader()).getLoaded();
        Class B = A.getField("b").getType();

        System.out.println(B.getField("a_array"));

但是,即使Byte-Buddy将创建类并加载它们,这也不起作用。

这段代码在评估B.getField("a_array")时给出了以下信息

代码语言:javascript
复制
Exception in thread "main" java.lang.NoClassDefFoundError: L[A;
    at java.lang.Class.getDeclaredFields0(Native Method)
    at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
    at java.lang.Class.getField0(Class.java:2975)
    at java.lang.Class.getField(Class.java:1701)
    at Test.main(Test.java:88)
Caused by: java.lang.ClassNotFoundException: [A
    at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.findClass(ByteArrayClassLoader.java:396)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 5 more

我想知道我怎么才能解决这个问题?

我能从TypeDescription of A创建TypeDescription of [A吗??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-13 04:33:25

要构造数组类型,请使用TypeDescription.Generic.Builder,它允许创建数组表示。不要使用InstrumentedType.Default来创建数组,因为它们旨在表示可定义的类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68290619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档