我在我的當前項目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