2

これにはおそらく非常に単純な解決策がありますが、私はそれを理解できないようです...
クラス 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;
    }

誰か(または誰か)がより良い方法を提案できますか?!

4

2 に答える 2

1

次のようなクラス宣言を使用しますclass Dimension<T extends Dimension<T>> {...}。これにより、 のようなサブクラスを指定できますclass AreaDimension extends Dimension<AreaDimension> {...}

あなたがこれを間違った方法で行っていると思うことに注意してください-距離、面積、体積クラスを使用する場合は、値、指数または次元に追加するだけです-単純な距離の次元は1、面積は2、体積は3. これにより、掛け算と割り算を適切に行うことができます。

複数の単位を使用する場合は、さまざまな単位に列挙を使用し、それぞれの次元に配列を使用します。

于 2010-08-17T01:43:07.643 に答える
0

この問題はほとんどなくなりました - 私は非常に異なる解決策を見つけたので、この答えがこの質問を締めくくると信じています! しかし、「マクロ」または「テンプレート」機能を Java 言語に組み込む方法について関連する質問が寄せられましたが、これはおそらくそれを提示するフォーラムではありません...誰かが私がどこに尋ねるべきかを提案できる場合(または答えがあります)、私はそれについて聞きたいです. 皆様に改めて感謝申し上げます。

于 2010-08-25T14:17:28.737 に答える