Tengo pares de clases donde los campos de uno son un subconjunto de los campos de otro y los captadores de las clases de superconjunto se llaman predeciblemente (getFoo()
). ¿Hay alguna manera de eficientemente copiar todos los campos comunes desde la clase de superconjunto a la clase de subconjunto, o al menos autogenerar el código para hacerlo.Copie campos entre clases similares en java
Debo señalar que:
- Por diversas razones, no puedo editar las clases superconjunto, ni puedo sólo los utilizan a lo largo para evitar tener que hacer la copia de datos.
- Posiblemente pueda crear nuevos métodos en las clases de subconjunto, pero no puedo cambiar sus campos.
- Tenemos docenas de estos pares, y algunas de las clases tienen muchos campos, por lo que hacer esto a mano es difícil de decir por lo menos.
- Un colega ha ideado un método para crear un método de copia genérico que utiliza reflexión de java para tomar dos clases, recorrer los campos como cadenas, manipular cadenas para determinar el nombre del captador y luego ejecutarlo para establecer automáticamente el campo en la clase de subconjunto. Es horrible, pero parece funcionar. Realmente espero que haya una mejor manera.
Editar: un código simple como solicitado
public class SuperClass {
private int foo;
private int bar;
private float bat;
public int getFoo() { return foo; }
public int getBar() { return bar; }
public float getBat() { return bat; }
}
public class SubClass {
private int foo;
private float bat;
}
//wanted
public static copySuperFieldsToSubMethod(Object super, Object sub) { ??? }
// also acceptable would be some way to autogenerate all the assignment
// functions needed
Si pudieras editar las clases de superconjunto simplemente podrías hacer que amplíen tus clases de subconjunto y hereden todos sus campos y métodos en la moda OO clásica. ¿Por qué no puedes editar las clases de superconjunto? – Asaph
@Asaph - lamentablemente, las clases de superconjunto son parte de una biblioteca externa que se desarrolló por separado y que ahora necesito poder transformar en las clases creadas para este proyecto específico que no utilizan mucha de la información en las más grandes . – Dusty
¿Qué pasa si se da vuelta la relación al revés y se heredan las clases de subconjunto de la clase de superconjunto? Puede anular cualquier método relacionado con campos que no necesita con cuerpos vacíos. No es muy elegante, pero al menos puedes volver a usar el código sin copiar/pegar, reflexión o generación de código. – Asaph