我在我的当前项目BeanBinding了很多工作,所以我有代码看起来像......在运行时将方法名称转换为bean名称?
TypeA objA;
TypeB objB;
Bindings.createAutoBinding(UpdateStrategy.READ,
objA, BeanProperty.create("X"),
objB, BeanProperty.create("X"))
.bind();
凡objA
和objB
是有一个setX()
方法的类的实例。问题在于,如果我重构setX
到setY
那么我需要搜索这些字符串属性名称。我意识到我可以为属性名称创建静态最终字符串,但如果我可以让编译器为我完成这项工作,那就更好了。
理想情况下,我想什么,能够做的是...
TypeA obja;
TypeB objB;
Bindings.createAutoBinding(UpdateStrategy.READ,
objA, BeanProperty.create(Magic.returnBeanName(TypeA.class).getX()),
objB, BeanProperty.create(Magic.returnBeanName(TypeB.class).setX())
.bind();
这似乎这可以通过一些代码的合成和/或方面是可行的。
在黑暗中的完整镜头,但也许'returnBeanName'可以使用javassist来创建一个对象,它采用每个getter方法,修改它的返回类型为String并返回属性名称?看起来很疯狂,但写起来很有趣。 – Jeremy
@Jeremy:我想过你的建议,但为了使Eclipse和其他重构工具正常工作,方法签名必须保持不变,这对于制定者来说是一个真正的问题,因为他们会产生空洞,并且也会因为它们是“特殊的“ –
我并不是说你应该修改bean本身。我的意思是你可以创建一个bean类的副本,方法名与你的bean完全相同,但是这些方法会返回属性的名称。 – Jeremy