0

インターフェイスを使用して、カスタムメソッドを使用して「arrivalTime」フィールドを使用してオブジェクトComparableのarrayListを並べ替えようとしていますが、オブジェクトが抽象的ではないため、できないと言われ続けます。抽象化することはできません。オブジェクト をインスタンス化する必要があります。CarcompareTo()CarCar

クラスを抽象化する必要がある理由を誰かが知っていますか?

4

5 に答える 5

2

クラス内のメソッド定義が正しくありません。それは違いない

@Override
public int compareTo(Car o)
{
    return 0;
}

このメソッドはインターフェイス内のメソッドを正しくオーバーライドしないため、IDE は、コンパイル エラーを回避するためにクラスの抽象をマークするように求めています。もう 1 つのオプションは、抽象メソッドをクラスに正しく実装し、エラーを取り除くことです。Eclipse を使用する場合は、クラスで Ctrl + 1 を押して、[実装されていないメソッドを追加] オプションを選択します。

于 2012-10-23T20:03:18.927 に答える
1

インターフェイスcompareToを実装するときに、IDEがクラスを抽象化するか、メソッドを定義することを強制しているようです。Comparable

于 2012-10-23T20:00:35.280 に答える
0

このように使用する必要があります:

public class Car implements Comparable<Car>{

    ...

    @Override
    public int compareTo(Car other) {
    ...
    }
}
于 2012-10-23T20:05:30.363 に答える
0

これが実際の(かなり粗雑な場合)例です:

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());
    }
}
于 2012-10-23T20:07:05.080 に答える
0

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);

並べ替えについては、こちらの私の投稿をご覧ください。

于 2012-10-23T20:35:05.210 に答える