Получить FieldDescription для защищенного поля в одном из суперклассов - PullRequest
1 голос
/ 15 апреля 2019

На основе TypeDefinition (например, инструментированного типа) я хочу быстро найти FieldDescription для защищенной переменной. Я знаю, что переменная есть в одном из суперклассов, но я не знаю точно, в каком из них. Вот упрощенный пример:

class C1 { protected int id; }

class C2 extends C1 {}

На основе typeDefinitionC1 = TypeDescription.ForLoadedType.of (C1.class) я могу найти поле, выполнив что-то вроде этого:

typeDefinitionC1.getDeclaredFields().filter(named("id")).getOnly()

Но, используя определение типа для C2, оно не работает, потому что поле не объявлено в C2. Я написал небольшую функцию для перебора всех суперклассов, чтобы найти поле, но я ожидаю, что ByteBuddy позволит мне сделать что-то вроде:

typeDefinitionC2.getFields().filter(named("id").and(isProtected())).getOnly()

Есть ли какой-нибудь удобный способ сделать это?

1 Ответ

0 голосов
/ 16 апреля 2019

Вы можете использовать new FieldLocator.ForExactType(typeDefinitionC1).locate(named("id")).

Byte Buddy не заполняет местоположение в API описания, как это делает API отражения, поскольку местоположение часто зависит от сайта поиска и варианта использования.

...