小编exc*_*ion的帖子

Byte Buddy - 定义构造函数并调用超类和初始化字段

我有一个类,例如:

public class Sample{

private String a;
private String b;

public Sample(String a, String b)
{
    this.a = a;
    this.b = b;
}
 public String getA() {return a;}
 public String getB() {return b;}
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个从 Sample 类继承的动态类,并向其中添加字段(字符串字段)。

我试图做:

DynamicType.Builder<? extends Sample> classBuilder = new ByteBuddy()
        .subclass(Sample.class, ConstructorStrategy.Default.NO_CONSTRUCTORS)
        .name("sampleSon");

classBuilder.defineConstructor(Visibility.PUBLIC)
        .withParameters(String.class, String.class, String.class)
        .intercept(MethodCall.invoke(Sample.class.getConstructor(String.class, String.class))
                .withArgument(0, 1)
                .andThen(FieldAccessor.ofField("c").setsArgumentAt(2)));
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从这个类创建一个实例时:

Class<? extends Sample> newSampleClass= classBuilder.make().load(ClassLoader.getSystemClassLoader()).getLoaded();
Sample sample = newSampleClass.getConstructor(String.class, String.class, String.class).newInstance("a", "b", "c");
Run Code Online (Sandbox Code Playgroud)

它抛出一个异常:

public class Sample{

private String a;
private String …
Run Code Online (Sandbox Code Playgroud)

java dynamic-class dynamic-class-creation byte-buddy

5
推荐指数
1
解决办法
1754
查看次数