estoy trabajando con BeanBinding mucho en mi proyecto actual y por lo que tengo código que se parece a ...¿Convierte un nombre de método en nombre de bean en tiempo de ejecución?
TypeA objA;
TypeB objB;
Bindings.createAutoBinding(UpdateStrategy.READ,
objA, BeanProperty.create("X"),
objB, BeanProperty.create("X"))
.bind();
Dónde objA
y objB
son instancias de clases que tienen un método setX()
. El problema es que si refactorizo setX
a setY
, entonces necesito buscar estos nombres de propiedad de cadenas. Me doy cuenta de que puedo crear cadenas finales estáticas para el nombre de la propiedad, pero si logro que el compilador haga el trabajo por mí, mucho mejor.
Idealmente, lo que me gustaría ser capaz de hacer es ...
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();
Parecería que esto podría ser posible a través de una síntesis y/o aspectos código.
Una toma completa en la oscuridad, pero tal vez 'returnBeanName' puede usar javassist para crear un objeto que tome cada método getter, modifique su tipo de retorno a String y devuelva el nombre de la propiedad? Parece un poco loco, pero suena divertido de escribir. – Jeremy
@Jeremy: Pensé en su sugerencia, pero para que Eclipse y otras herramientas de refactorización funcionen, la firma del método debe permanecer igual, lo que sería un problema real para los incubadores ya que producen vacíos y también métodos finales ya que son "especiales " –
No quise decir que debas modificar el bean en sí. Quise decir que podrías hacer una copia de la clase de bean, con nombres de método exactamente iguales a tu bean, pero con esos métodos devolviendo el nombre de la propiedad. – Jeremy