インターフェイスを使用して、カスタムメソッドを使用して「arrivalTime」フィールドを使用してオブジェクトComparable
のarrayListを並べ替えようとしていますが、オブジェクトが抽象的ではないため、できないと言われ続けます。抽象化することはできません。オブジェクト をインスタンス化する必要があります。Car
compareTo()
Car
Car
クラスを抽象化する必要がある理由を誰かが知っていますか?
インターフェイスを使用して、カスタムメソッドを使用して「arrivalTime」フィールドを使用してオブジェクトComparable
のarrayListを並べ替えようとしていますが、オブジェクトが抽象的ではないため、できないと言われ続けます。抽象化することはできません。オブジェクト をインスタンス化する必要があります。Car
compareTo()
Car
Car
クラスを抽象化する必要がある理由を誰かが知っていますか?
クラス内のメソッド定義が正しくありません。それは違いない
@Override
public int compareTo(Car o)
{
return 0;
}
このメソッドはインターフェイス内のメソッドを正しくオーバーライドしないため、IDE は、コンパイル エラーを回避するためにクラスの抽象をマークするように求めています。もう 1 つのオプションは、抽象メソッドをクラスに正しく実装し、エラーを取り除くことです。Eclipse を使用する場合は、クラスで Ctrl + 1 を押して、[実装されていないメソッドを追加] オプションを選択します。
インターフェイスcompareTo
を実装するときに、IDEがクラスを抽象化するか、メソッドを定義することを強制しているようです。Comparable
このように使用する必要があります:
public class Car implements Comparable<Car>{
...
@Override
public int compareTo(Car other) {
...
}
}
これが実際の(かなり粗雑な場合)例です:
public class Cars
{
static class Car
{
Date arrivalTime;
public Car(Date time)
{
arrivalTime = time;
}
}
static class CarComparator implements Comparator<Car>
{
@Override
public int compare(Car o1, Car o2)
{
return o1.arrivalTime.compareTo(o2.arrivalTime);
}
}
public static void main(String[] args)
{
List<Car> cars= new ArrayList<Car>();
// create and add some cars here
Collections.sort(cars, new CarComparator());
}
}
Comparable
次のようなインターフェイスを使用する必要があります。
public class Car implements Comparable<Car> {
private int arrivalTime;
public Car(int arrivalTime) {
this.arrivalTime = arrivalTime;
}
public int getArrivalTime() {
return this.arrivalTime;
}
@Override
public int compareTo(Car car) {
return this.arrivalTime - car.getArrivalTime();
}
}
実際の並べ替えを行うには:
LinkedList<Car> cars = new LinkedList<Car>();
cars.add(new Car(20000));
cars.add(new Car(30000));
cars.add(new Car(40000));
Collections.sort(cars);
並べ替えについては、こちらの私の投稿をご覧ください。