获取其中一个超类中受保护字段的 FieldDescription
Get FieldDescription for protected field in one of the superclasses
基于 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()
有什么方便的方法吗?
您可以使用 new FieldLocator.ForExactType(typeDefinitionC1).locate(named("id"))
.
Byte Buddy 不会像反射 API 那样将位置添加到描述 API 中,因为位置通常取决于查找站点和用例。
基于 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()
有什么方便的方法吗?
您可以使用 new FieldLocator.ForExactType(typeDefinitionC1).locate(named("id"))
.
Byte Buddy 不会像反射 API 那样将位置添加到描述 API 中,因为位置通常取决于查找站点和用例。