ByteBuddy - создать интерфейс геттера/сеттера

Я пытаюсь создать Intgerface из списка, где элементы представляют методы «получить». Интерфейс генерируется без исключения, но когда я рефлективно пытаюсь получить методы интерфейса типа Dynamic, в списке нет методов. Кажется, это должно быть просто

ByteBuddy bb = new ByteBuddy();
Builder<?> bbb = bb.makeInterface().merge(Visibility.PUBLIC);
for (K name : propertyNames) {
    String get = "get" + name.toString();
    String set = "set" + name.toString();
    bbb.defineMethod(get, String.class, Visibility.PUBLIC); //** .withoutCode()
    bbb.defineMethod(set, String.class, Visibility.PUBLIC).withParameter(String.class); //** .withoutCode()
}
DynamicType.Unloaded unloadedType = bbb.name(NAME).make();
DYNAMIC_TYPE = unloadedType.load(POJOFactory.class.getClassLoader()).getLoaded();

На прошлой неделе я искал в Google ссылки на создание интерфейса с ByteBuddy, но там просто нет ссылок.

Спасибо,


person k m    schedule 06.03.2018    source источник
comment
Я понял проблему. Проблема заключалась в том, как я имел в виду ссылку «bbb». Текущее использование: bbb = bbb.defineMethod..... Мне нужно было сохранить результат обратно в исходную ссылку после вызова метода.   -  person k m    schedule 07.03.2018


Ответы (1)


API конструктора Byte Buddy полностью неизменяем. Вы всегда должны работать с возвращаемым значением. Все вызовы не имеют побочных эффектов, поэтому:

builder.<something>

не имеет никакого эффекта. Правильным способом было бы:

builder = builder.<something>
person Rafael Winterhalter    schedule 07.03.2018