我不断回到这个问题的变体:它可能有一个非常简单的解决方案,但我似乎无法弄清楚......
我有一堆 xQuantity 形式的类,例如 DistanceQuantity、AreaQuantity 等,它们扩展了一个类 DimensionQuantity。现在您可以添加或减去DistanceQuantity或AreaQuantity等,但不能混合它们,所以我认为我需要在子类中有(短)add,subtract等方法,但我想减少任何逻辑重复到最低限度。但是,我需要返回子类的一个对象,这似乎很难从超类方法中做到。我相信这可以使用反射来完成,但是AFAIK您仍然需要在子类方法的最后进行强制转换,并且我被告知反射可能很昂贵......到目前为止我想出的最好的是:
在 DistanceQuantity (和其他类似的)中:
public DistanceQuantity() {
}
public DistanceQuantity add(DistanceQuantity d1) {
DistanceQuantity dn = new DistanceQuantity();
Object o = super.add(dn, this, d1, DistanceUnit.REF_UNIT);
return (DistanceQuantity) o;
}
在 DimensionQuantity 中(减去一些不太相关的语句):
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;
}
任何人都可以提出更精简的代码 - 仍然是类型安全的吗?TIA