これにはおそらく非常に単純な解決策がありますが、私はそれを理解できないようです...
クラス DimensionQuantity を拡張する、DistanceQuantity、AreaQuantity などの形式の xQuantity のクラスがたくさんあります。これで、DistanceQuantity や AreaQuantity などを加算または減算できますが、それらを混合することはできません。すべてのサブクラスには、add()、subtract()、ge() などのメソッドがあるため、共有ロジックを DimensionQuantity に入れるとよいのですが、キャストの問題が引き続き発生します。
これまでのところ、私が思いついた最善の方法は、オブジェクトを生成し、それをサブクラスのメソッドにキャストすることですが、サブクラスの add() (および他の同様のメソッド) を完全に削除することをお勧めします! コードは次のとおりです (一部省略しています)。
DistanceQuantity:
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;
}
誰か(または誰か)がより良い方法を提案できますか?!