sigo volviendo a variantes de este problema: es probable que tenga una solución muy simple, pero me parece que no puede averiguarlo ...objeto de subclase del método de la superclase
que tienen un montón de clases de la forma xCantidad, por ejemplo DistanceQuantity, AreaQuantity, etc., que extienden una clase DimensionQuantity. Ahora puede sumar o restar DistanceQuantity o AreaQuantity, etc., pero no puede mezclarlos, así que creo que necesito tener métodos (cortos) para sumar, restar, etc. en las subclases, pero quiero reducir cualquier lógica duplicación a un mínimo. Sin embargo, necesito devolver un objeto de la subclase, y esto parece difícil de hacer desde el método de la superclase. Creo que esto se puede hacer usando la reflexión, pero AFAIK todavía necesita hacer un molde al final en el método de la subclase, y me dicen que la reflexión puede ser costosa ... Lo mejor que he encontrado hasta ahora es:
En DistanceQuantity (y los otros similares):
public DistanceQuantity() {
}
public DistanceQuantity add(DistanceQuantity d1) {
DistanceQuantity dn = new DistanceQuantity();
Object o = super.add(dn, this, d1, DistanceUnit.REF_UNIT);
return (DistanceQuantity) o;
}
En DimensionQuantity (menos algunos estados menos relevantes):
public Object add(DimensionQuantity dn, DimensionQuantity d1, DimensionQuantity d2,
AbstractUnit au) {
dn.unit = au;
dn.scalar = d1.scalar + d2.scalar;
dn.units = dn.scalar;
return dn;
}
¿alguien puede subir con código más delgado - que sigue siendo de tipo ¿seguro? TIA
es mejor (más claro una vez que tienes muchos genéricos) para nombrar los genéricos algo más cercano a T_DimensionQuantity – Egwor
Has olvidado la palabra clave abstracta. ;) Solo el uso de 'T' es una práctica bastante estándar, creo. – Michael
@mangst gracias, es abstracto ahora. @Egwor, como dijo @mangst, T es común. T para Type, en Collection es E para Element, en Map es K y V para Key y Value. Por lo general, es la primera letra de su significado genérico. –