gpt4 book ai didi

java - Byte Buddy - 方法 Implementation.Context.Default 不是 bean 属性 - 创建一个 setter

转载 作者:搜寻专家 更新时间:2023-11-01 02:59:18 24 4
gpt4 key购买 nike

如何使用 byte buddy 在字段上创建 setter?推荐的语法是什么?

我设法从一个字段创建了 getter(我最初的问题 here),但是使用 defineMethod 创建 setter 会抛出一个 Method Implementation.Context.Default ... 没有 bean 属性 异常。

this 中创建 setter 的建议方法问题似乎已经过时了。

这是我使用 byte-buddy 1.5.4 版的失败代码:

public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, NoSuchMethodException {
Class<?> type = new ByteBuddy()
.subclass(Object.class)
.name("domain")
.defineField("id", int.class, Visibility.PRIVATE)
.defineMethod("getId", int.class, Visibility.PUBLIC).intercept(FieldAccessor.ofBeanProperty())
.defineMethod("setId", Void.TYPE, Visibility.PUBLIC).intercept(FieldAccessor.ofBeanProperty())
.make()
.load(sample.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
.getLoaded();

Object o = type.newInstance();
Field f = o.getClass().getDeclaredField("id");
f.setAccessible(true);
System.out.println(o.toString());
Method m = o.getClass().getDeclaredMethod("getId");
System.out.println(m.getName());
Method s = o.getClass().getDeclaredMethod("setId", int.class);
System.out.println(s.getName());
}

最佳答案

您还没有为 setter 定义参数。字节好友因此不明白该方法是如何实现的。定义setId方法时需要设置withParameters(int.class)。

关于java - Byte Buddy - 方法 Implementation.Context.Default 不是 bean 属性 - 创建一个 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40693573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com