0

ジェネリックで指定されたオブジェクトを取り込める独自の「LinkedList」クラスを作成しました。

そのクラスでは、クラスが Comparator を実装するオブジェクトを受け取る sort(ComparatorObject)メソッドが必要です。

その理由は、特に私のテスト オブジェクトである形状について、形状の面積、周囲、タイプなど、ユーザーが選択したさまざまなフィールドでそれらを並べ替えることができるかどうかを確認したいからです。

現在、コンパレータ クラスの 1 つが次のように定義されています。

public class Comparator_Area implements Comparator<Shape>{

@Override
public int compare(Shape shape1, Shape shape2) {
    int valueToReturn = 0;

    if(shape1.getArea() < shape2.getArea()){
        valueToReturn = -1;
    }
    else if(shape1.getArea() < shape2.getArea()){
        valueToReturn = 1;
    }

    return valueToReturn;
}
}

そして、LinkedList クラスでは、並べ替えメソッドは次のように定義されています (正しいかどうかはわかりませんが、これを行う方法を調べているときに見つけたものです)。

public void sort(Class<? extends Comparator<E>> comparator){

}

当然、並べ替えメソッドで次のようなものを使用できるようにしたいと思います。

comparator.compare(shape1, shape2);

しかし、「比較」を使用することはできず、これをどのように達成する必要があるのか​​ よくわかりません。

4

2 に答える 2

3

Comparatorsort メソッドのパラメーターとしてオブジェクトを送信する必要があります。

public void sort(Comparator<Shape> comparator){

}

これは、LinkedList クラスが のみであると想定していますShape。一般的な LinkedList 実装がある場合は、次を渡すことができますComparator<T>

public class MyLinkedList<T> {
    //other methods...

    public void sort(Comparator<T> comparator){

    }
}
于 2012-10-28T18:53:52.703 に答える
1

Classオブジェクトをパラメータとして渡しています。代わりに次のことを試してください。

public void sort(Comparator<T> comparator){

}

どこTであなたのジェネリック型ですLinkedList

于 2012-10-28T18:56:22.843 に答える