0

Unit という名前のクラス (位置変数 x を持つ) があり、そのクラスを UnitA、UnitB、UnitC などに拡張するとします。

これは私が思いついたものです:

Unit[] ordered = new Unit[a_num+b_num+c_num];
ordered = Arrays.copyOf(a_units, a_num); //and add b_units, c_units, etc
Arrays.sort(ordered); //sort using compareTo method
  • 最高のパフォーマンスときちんとしたプログラミングのために、これらの値を左から右 (x 変数) に並べ替える最良の方法は何ですか?
  • 配列がソートされている場合、ユニット固有の変数にアクセスするために、各エントリがどのタイプのオブジェクトであるかを調べるにはどうすればよいですか?
4

2 に答える 2

5

各エントリがどのタイプのオブジェクトであるかを調べなければならない場合、それは間違っています。

ポリモーフィズムが唯一の方法です。それがオブジェクト指向言語の目的です。

ユニットをどのように並べ替えるかは言いません。長さはメートル、質量はキログラム、時間は秒などの物理単位のことですか? はいの場合、それらを「並べ替える」とはどういう意味ですか? もちろん、アルファベット順に並べることもできますが、それがどれほど意味があるかはわかりません。

「位置変数」とは何ですか?さまざまな「位置」にメートル、フィート、オングストローム、ハロンなどの基本的な値を持つ長さの単位があるということですか? そして、どのように注文しますか?人気順?答えは、英国単位をまだ使用している数少ない国 (たとえば、米国。英国でさえ帝国単位を放棄した!) またはメートル法を使用している国の 1 つにいるかどうかによって異なります。

于 2012-11-04T14:44:36.530 に答える
2

Arrays.sort(ordered)単位の自然順序付け (compareTo メソッドで定義) に基づいてソートされます。自然な順序付けが必要でない場合はArrays.sort(array, Comparator)、ユニットの位置を比較するコンパレータを使用して渡します。

2 番目の質問について: ユニットの種類を知る必要はありません。Unit クラスは、呼び出すことができ、適切な処理を行うためにすべてのサブクラスによって実装されるポリモーフィック メソッドを提供する必要があります。常にinstanceof演算子とgetClass()メソッドがありますが、それらを使用することは OO 設計の欠如を示しているため、悪い習慣です。

于 2012-11-04T14:48:00.323 に答える