ByteBuddy: Как объявить класс с помощью пользовательского метода внутри другого класса - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь динамически создать класс, который расширяет класс ServerPing, внутри этого класса есть статический класс, называемый Serializer, я хочу переопределить его метод «a» и возвращает мой собственный JsonElement. Проблема в том, что я не знаю, как редактировать статический класс внутри другого класса, используя bytebuddy.

Вот как это может выглядеть (но defineClassInside не существует):

        Class<?> serverPingSerializerClone = new ByteBuddy()
                .subclass(serverPingClass)
                .defineClassInside("Serializer",
                        new ByteBuddy().subclass(ServerPing.Serializer.class)
                                .method(ElementMatchers.named("a")
                                        .and(ElementMatchers.returns(JsonElement.class)
                                                .and(ElementMatchers.takesArguments(3))))
                                .intercept(FixedValue.value(exampleResponse))
                                .make())
                .make()
                .load(Core.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER).getLoaded();```

1 Ответ

0 голосов
/ 27 июня 2019

На уровне байтового кода внутренний класс Bar, определенный внутри Foo, является ничем иным, как классом с именем Foo $ Bar с некоторыми дополнительными метаданными.

Вы можете просто обработать внутренний / вложенный класс как любой другой класси подкласс это.Если вам нужно добавить метаданные внутреннего класса, у Byte Buddy есть шаги DSL для редактирования / добавления такой информации, например innerTypeOf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...