4

私はジェネリッククラスを書いています

public class SomeClass<T> {

    public static <T extends Comparable<? super T>> T min(Collection<? extends T> c) {
        T min = c.iterator().next();
        for (T element : c)
            if (element.compareTo(min) < 0)
                min = element;
        return min;
    }

}

public class Main {

    public static void main(String[] args) {
        SomeClass<Integer>.min(Arrays.asList(1, 2, 3)); // compile-time error
        SomeClass.min(Arrays.asList(1, 2, 3)); // ok
    }

}

ジェネリック クラスSomeClassとジェネリック メソッドSomeMethodの型パラメーターTは同じですか、それとも違いますか?

string でコンパイル時エラーが発生するのはなぜSomeClass<Integer>.min(Arrays.asList(1,2,3));ですか?

4

5 に答える 5

0

2 つTの s は異なります。最初の 1 つはクラスのパラメーター (および未使用) で、2 番目はメソッドに固有です。メソッドは静的であるため、クラス パラメータは影響しません。

を記述すると、そのクラスのオブジェクトがインスタンスSomeClass<Integer>.min(Arrays.asList(1, 2, 3));化されていないため、パラメーターを追加しても意味がないため、エラーが発生します。そのクラスから静的メソッドを呼び出すことをコンパイラに伝えるためにのみ使用されます。を使用してメソッドにパラメーターを追加できますが、コンパイラーはここで型を推測できるため、その必要はありません。SomeClassSomeClassSomeClass.<Integer>min(Arrays.asList(1, 2, 3));

于 2013-10-28T13:20:19.127 に答える