我在当前项目中经常使用 BeanBinding,所以我的代码看起来像...
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 创建一个类似于 bean 的不同类,只是它将 getter 的返回类型修改为 String 并返回属性名称?
例如,如果您的 bean 如下所示:
public class Foo{
private int x;
public int getX(){
return x;
}
public void setX(int x){
this.x= x;
}
}
然后动态创建一个不同的类,如下所示:
public class FooMeta{
public String getX(){
return "x";
}
}
看起来有点疯狂,但写起来很有趣。
关于java - 在运行时将方法名称转换为 bean 名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6985706/