这可能有一个非常简单的解决方案,但我似乎无法弄清楚......
我们有一堆xQuantity 形式的类,例如DistanceQuantity、AreaQuantity 等,它们扩展了一个DimensionQuantity 类。现在可以加减DistanceQuantity's 或AreaQuantity's 等,但不能混合使用。所有子类都有 add()、subtract()、ge() 等方法,因此将共享逻辑放入 DimensionQuantity 会很好,但我一直遇到转换问题。
到目前为止,我想出的最好方法是生成一个对象,然后将其转换为子类的方法,但是完全摆脱子类 add() (和其他类似方法)会很好!这是代码(省略了一些东西):
在距离数量中:
public DistanceQuantity add(DistanceQuantity d1) {
Object o = new DistanceQuantity(scalar + d1.scalar, REF_UNIT);
return (DistanceQuantity) o;
}
在维度数量:
@SuppressWarnings({"rawtypes", "unchecked"})
public Object add(DimensionQuantity d1) {
Class c1 = this.getClass();
Class c2 = d1.getClass();
if (c1 != c2)
throw new RuntimeException();
double d = scalar + d1.scalar;
Constructor c = null;
c = c1.getConstructor(Double.TYPE, AbstractUnit.class);
Object o = null;
o = c.newInstance(d, REF_UNIT);
return o;
}
有人(或某人)可以提出更好的方法吗?