Byte Buddy - java.lang.NoSuchMethodException - 正确的 defineMethod 语法是什么?
Byte Buddy - java.lang.NoSuchMethodException - what is the correct defineMethod syntax?
我正在尝试使用 Byte Buddy 为字段创建 setter 和 getter。
public class Sample {
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())
.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", int.class);
System.out.println(m.getName());
}
}
在学习页面的访问字段部分 here 声明在定义方法后使用 implementation
创建 setter 和 getter 是微不足道的然后使用 FieldAccessor.ofBeanProperty()
Method m = o.getClass().getDeclaredMethod("getId", int.class);
抛出 NoSuchMethodException。
创建 getter 和 setter 的正确语法是什么?
正确的方法调用应该是
Method m = o.getClass().getDeclaredMethod("getId");
int
是 return 类型,您不必在 getDeclaredMethod
调用中指定 return 类型 - 只需指定参数类型和方法getId
没有参数。
我正在尝试使用 Byte Buddy 为字段创建 setter 和 getter。
public class Sample {
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())
.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", int.class);
System.out.println(m.getName());
}
}
在学习页面的访问字段部分 here 声明在定义方法后使用 implementation
创建 setter 和 getter 是微不足道的然后使用 FieldAccessor.ofBeanProperty()
Method m = o.getClass().getDeclaredMethod("getId", int.class);
抛出 NoSuchMethodException。
创建 getter 和 setter 的正确语法是什么?
正确的方法调用应该是
Method m = o.getClass().getDeclaredMethod("getId");
int
是 return 类型,您不必在 getDeclaredMethod
调用中指定 return 类型 - 只需指定参数类型和方法getId
没有参数。