java - Byte Buddy - java.lang.NoSuchMethodException - 正确的defineMethod语法是什么?

标签 java code-generation byte-buddy

我正在尝试使用 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据称,通过在定义方法后使用实现然后使用FieldAccessor.ofBeanProperty()

来创建setter和getter是微不足道的

方法 m = o.getClass().getDeclaredMethod("getId", int.class); 抛出 NoSuchMethodException。

创建 getter 和 setter 的正确语法是什么?

最佳答案

正确的方法调用应该是

Method m = o.getClass().getDeclaredMethod("getId");

int 是返回类型,您不必在 getDeclaredMethod 调用中指定返回类型 - 只需指定参数类型和方法 getId 没有参数。

关于java - Byte Buddy - java.lang.NoSuchMethodException - 正确的defineMethod语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40692972/

相关文章:

java - Java中逗号运算符的等价物?

java - 如何使用字节好友创建懒加载类?

java - 实例方法 equals()

java - java 类 CachedRowSetImpl 的奇怪行为

c# - 我可以使用 System.Linq.Expressions 动态生成异步方法吗?

java - 需要实体的 DAO 的代码生成工具

java - 加载检测类时避免注入(inject)

java - Byte Buddy : java. lang.AbstractMethodError:调用方法时出错

java - 字符串到日期的转换

java - 四元数平滑旋转