0
Comparator<? super E> comparator()

このメソッドは、SortedSetインターフェースで宣言されています。

スーパーとはどういう意味ですか?

上記のメソッドは、ジェネリックメソッドやワイルドカード引数を使用するメソッドとどのように異なりますか。

4

5 に答える 5

3

SortedSetは、並べ替えを決定するために使用するいくつかのルールを持っている必要があります。これらのComparatorルールの実装です。インターフェイスは、同じ並べ替えルールを使用する別のセットを作成するなど、他の目的に使用できるように、その参照を取得するためのメソッドを提供します。

于 2012-05-30T21:21:40.930 に答える
3

これは、比較のタイプが現在のタイプのスーパータイプである可能性があることを意味します。

例えば。あなたは以下を持つことができます:

static class A {
}

static class B extends A {
}

public static void main(String[] args) {

    Comparator<A> comparator = new Comparator<A>() {
        public int compare(A a1, A b2) {
            return 0;
        }
    };

    // TreeSet.TreeSet<B>(Comparator<? super B> c)
    SortedSet<B> set = new TreeSet<B>(comparator);

    // Comparator<? super B> comparator()
    set.comparator();
}

この場合、AはのスーパータイプですB

これがお役に立てば幸いです。

于 2012-05-30T21:43:42.587 に答える
0

javadocから:

「このセットの要素の順序付けに使用されたコンパレータを返します。このセットが要素の自然な順序付けを使用している場合はnullを返します。」

:)

于 2012-05-30T21:22:12.867 に答える
0

これに対する答えは、インターフェース宣言にあります。public interface SortedSet<E> extends Set<E> { ...

これは、使用するタイプimplements SortedSetを指定する必要があるクラスを意味します。例えば

class MyClass implements SortedSet<AnotherClass>

これにより、(Eclipseを使用して)次のような一連のメソッドが生成されます。

    public Comparator<? super AnotherClass> comparator()
{
    return null;
}

public boolean add( AnotherClass ac)
{
    return false;
}

AnotherClass当然のことながら、これはPaulVargasが指摘したようにのすべてのサブクラスで機能します。

あなたが見逃しているかもしれない他の側面は、コンパレータがインターフェースでもあるということです:public interface Comparator<T>。つまり、返されるのはこれの実装です。

興味深いことに、Comparatorインターフェースを使用する別の便利な方法は、Arrays.sort(Object[] a, Comparator c)メソッドの一部として匿名で指定することです。

Personクラスがある場合、このメソッドを使用して、次のように年齢と名前で並べ替えることができます。

    Person[] people = ....;
// Sort by Age
    Arrays.sort(people, new Comparator<Person>()
    {
        public int compare( Person p1, Person p2 )
        {
            return p1.getAge().compareTo(p2.getAge());
        }
    });


// Sort by Name
    Arrays.sort(people, new Comparator<Person>()
    {
        public int compare( Person p1, Person p2 )
        {
            return p1.getName().compareTo(p2.getName());
        }
    });
于 2012-05-30T22:14:16.030 に答える
0

ここでの「スーパー」は、メソッドがEのコンパレータを返す必要がないことを意味します。代わりにEのスーパークラスのコンパレータを返す可能性があります。したがって、具体的には、Eが文字列の場合、このメソッドはより一般的なものになります。オブジェクトのコンパレータ。

ジェネリックメソッドは、独自の新しいジェネリックパラメーターを宣言します。このメソッドは、クラス宣言によって宣言されたジェネリックパラメーターEを参照するだけSortedSet<E>です。一般的な方法はあまり一般的ではありません。それらは通常、Arraysメソッドのように静的です

public static <T> List<T> asList(T...)

ここで、Tは宣言され、このメソッドでのみ使用されます。返されるリスト内のオブジェクトのタイプが、varargパラメーター内のオブジェクトのタイプと同じであることを示しています。

ワイルドカード引数の正確な定義はわかりません。?ワイルドカード文字です。のようなワイルドカードパラメータを取得するときの一般的なパターンList<?>は、オブジェクトを取り出してObjectにキャストすることはできますが、何も入れることはできないというものです。

于 2012-05-30T22:22:19.483 に答える