これはコレクションのコピー方法です(その一部):
public static <T> void copy(List<? super T> dst, List<? extends T> src) {
for (int i = 0; i < src.size(); i++) {
dst.set(i, src.get(i));
}
}
4 つのサンプル コールがあります。
List<Object> objs = Arrays.<Object>asList(2, 3.14, "four");
List<Integer> ints = Arrays.asList(5, 6);
1. Collections.copy(objs, ints);
2. Collections.<Object>copy(objs, ints);
3. Collections.<Number>copy(objs, ints);
4. Collections.<Integer>copy(objs, ints);
上記の呼び出しはどのように機能しますか?
いくつかの可能なシグネチャを使用してメソッドを宣言することもできます
1. public static <T> void copy(List<T> dst, List<T> src)
2. public static <T> void copy(List<T> dst, List<? extends T> src)
3. public static <T> void copy(List<? super T> dst, List<T> src)
4. public static <T> void copy(List<? super T> dst, List<? extends T> src)
上記の呼び出しの例では、
これらの最初のものは、宛先と送信元がまったく同じタイプの場合にのみ呼び出しを許可するため、制限が厳しすぎます。(了解) .
2 番目の署名は、型パラメーターが Object の場合にのみ機能します
3 番目のシグネチャは、型パラメーターが Integer の場合にのみ機能します
最後のシグネチャは、Object、Number、および Integer の 3 つの型パラメーターすべてに対して機能します。
2 番目、3 番目、最後の署名についても説明してください。
残りの 3 つは、暗黙的な型パラメーターを使用する呼び出しと同等ですが、明示的な型パラメーターとは異なります。
この上記のステートメントはどういう意味ですか?