我有一个类MyClass
的Field
f
,我想检索相关的getter/setter(如果存在)。我该怎么做?
- 我检查了
Field
的方法,但没有一个返回Method
。 - 我使用了
Introspector.getBeanInfo(Class<?> beanClass)
检索到的BeanInfo
。它有一个方法getPropertyDescriptors()
,它返回一个PropertyDescriptor
数组,每个PropertyDescriptor
都允许通过getReadMethod()
和getWriteMethod()
来检索getter和setter。但似乎与Field
没有任何连接。此外,似乎不可能获得特定PropertyDescriptor
(例如,通过将字段名作为参数来检索);因此,即使有一种方法可以从PropertyDescriptor
中获得Field
,我也需要遍历所有PropertyDescriptors
。这不是性能问题。 - 注:*我不想依赖命名约定,所以请不要给出干扰字段名称的答案。字段
myField
的getter如果没有名称getMyField
或isMyField
,那么它仍然是getter。
3条答案
按热度按时间bvjxkvbb1#
这是我的想法,但并不完全正确。检查方法名中是否包含字段名,以及返回类型和参数参数类型。我觉得如果没有关于字段的setter/getter方法的规则。这几乎是不可能的。
carvr3hs2#
事实证明,在Java中,getter/setter不仅仅是由它们的签名和行为(正如我所想的)定义的,还通过遵循命名约定来定义。
因此,为了为对象
myObject
的Field
myField
获取getter/setter,我们需要创建相应的getter/ssetter方法名methodName
(使用Field.getName()
,然后摆弄get
/set
和camelCase),然后调用myObject.getClass().getMethod(methodName, ...)
。参数(...
)可以通过Field.getType()
来检索,并且必须根据我想要getter还是setter而有所不同。证明命名很重要:对于这个类
我运行了代码
并得到了输出
frebpwbc3#
}