次のように抽象クラスを定義しました。
public abstract class Move implements Comparable<Move> {
protected int cell;
protected int weight;
public int getWeight()
{
return this.weight;
}
public void setWeight(int value)
{
this.weight = value;
}
protected Move(int cell)
{
this.cell = cell;
this.weight = 0;
}
protected Move(int cell, int weight)
{
this.cell = cell;
this.weight = weight;
}
@Override
public int compareTo(Move m)
{
return this.weight - m.weight;
}
このクラスを拡張する追加の 2 つのクラスがあります (MoveLeft および MoveRight クラス)。両方のタイプのオブジェクトを Move タイプの List に追加し、Collections.sort を使用して並べ替えます。
List<Move> moves = new ArrayList<Move>(someSize);
moves.add(new MoveLeft(cell1));
moves.add(new MoveRight(cell2));
moves.add(new MoveRight(cell3));
moves.add(new MoveLeft(cell4));
Collections.sort(moves);
ただし、リストは重みではなくセルでソートされています。
サブクラス化された異なるインスタンスを同じソートに混在させることはできませんか?
注: サブクラス化されたコンストラクターの重みに一意の値を設定しています。