私はこの問題の変種に戻ってきます。おそらく非常に単純な解決策がありますが、それを理解できないようです...
クラス DimensionQuantity を拡張する、DistanceQuantity、AreaQuantity などの xQuantity 形式のクラスがたくさんあります。これで、DistanceQuantity や AreaQuantity などを加算または減算できますが、それらを混合することはできないため、サブクラスに (短い) 加算、減算などのメソッドが必要だと思いますが、ロジックを削減したい重複は最小限に。ただし、サブクラスのオブジェクトを返す必要があり、これをスーパークラスのメソッドから行うのは難しそうです。これはリフレクションを使用して実行できると思いますが、サブクラス メソッドの最後にキャストを行う必要があることがわかります。リフレクションはコストがかかる可能性があると言われています...これまでに思いついた最高のものは次のとおりです。
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;
}
より無駄のないコードを思い付くことができる人はいますか?それはまだ型安全です? ティア