JFace数据绑定:父类字段绑定问题求助
解决父类属性的PropertyDescriptor获取问题
嘿,这个问题我之前也碰到过!咱们一步步来搞定它:
首先得明确:Apache Commons BeanUtils的PropertyUtils是基于JavaBean规范工作的——它识别的是属性对应的公共getter/setter方法,而非直接访问私有字段,而且属性名不需要带上父类的类名。你的问题主要出在两个点上:
Instrument类里的e是私有字段,没有对应的公共getter方法,PropertyUtils无法识别这个属性- 你使用了
"Instrument.e"作为propertyName,但正确的属性名就是"e",PropertyUtils会自动遍历对象的继承链,找到父类的属性
具体修改步骤:
- 给
Instrument类添加符合JavaBean规范的公共getter方法:
class Instrument { // 其他字段 private Entity e; // 必须提供public的getter,PropertyUtils才能识别"e"属性 public Entity getE() { return e; } // 如果需要修改属性,可添加对应的setter public void setE(Entity e) { this.e = e; } }
- 调用
PropertyUtils.getPropertyDescriptor时,直接使用"e"作为propertyName:
// model.getValue()返回Equity实例完全没问题,因为Equity继承自Instrument PropertyDescriptor descriptor = PropertyUtils.getPropertyDescriptor(model.getValue(), "e");
这样就能正常获取到父类Instrument中e属性的PropertyDescriptor了。
额外补充:
如果后续需要访问e属性里的someField(比如Entity.someField),PropertyUtils支持嵌套路径写法,比如用"e.someField"作为propertyName,但前提是Entity类也给someField提供了对应的公共getter方法哦。
内容的提问来源于stack exchange,提问作者XtremeBaumer
相关产品推荐
相关产品推荐

