ジェネリックは知っていますが、この構文については明確ではありません。たとえば、 Collections.sort() では次のようになります。
public static <T> void sort(List<T> list, Comparator<? super T> c)
<T>
戻り値の型 void の前の static の意味は何ですか?
ジェネリックは知っていますが、この構文については明確ではありません。たとえば、 Collections.sort() では次のようになります。
public static <T> void sort(List<T> list, Comparator<? super T> c)
<T>
戻り値の型 void の前の static の意味は何ですか?
からのメソッドシグネチャsort
:
public static <T> void sort(List<T> list, Comparator<? super T> c) {
これ<T>
は、メソッド定義で参照できる任意のジェネリック型Tを定義します。
ここで言っているのは、このメソッドにはList
あるタイプ(どちらでもかまいません)のTとComparator
別のタイプのが必要ですが、このタイプはTのスーパータイプでなければなりません。これは次のことを実行できることを意味します。
Collections.sort(new ArrayList<String>(), new Comparator<String>());
Collections.sort(new ArrayList<Integer>(), new Comparator<Number>());
しかし、これではありません
Collections.sort(new ArrayList<String>(), new Comparator<Integer>());
<T>
戻り値の型 void の前の static の意味は何ですか?
これはジェネリック メソッドであり、<T>
その型パラメーターです。List<T>
コンパレータがこのタイプまたはそのスーパータイプ ( ) のオブジェクトを比較できる限り、任意のタイプ ( ) のオブジェクトを含むリストをソートしますComparator<? super T>
。sort
したがって、コンパイラは、たとえば aList<Integer>
と a Comparator<Number>
(Integer
のサブタイプであるNumber
)を渡すことを許可しますが、 aList<Object>
とa は許可しませんComparator<String>
。
インスタンス化せずにソートできますCollections
。sort()
メソッドはCollections
クラスの静的メソッドです。
次の構文の違いを考慮してください。
Collections col = new Collections();
col.sort(someCollection);
と
Collections.sort(someCollection);
このsort()
メソッドは、可能な Collections オブジェクトのプロパティに依存する必要はありません。したがって、is はstatic
設計上のメソッドとして宣言する方が適切です。
これ<T>
は type パラメータと呼ばれ、sort メソッドが操作するアイテムのタイプを抽象化するために使用されます。クラスまたはメソッドの型パラメーターを持つことができます。これは、メソッドの戻り値の型の前にある必要があるメソッドの型パラメーターを指定するための構文です。