次のコードが動作する理由を私は理解していない:addToCollection(T [] a、Collection <T> c)の型Tは同じではないでしょうか?
import java.util.ArrayList;
import java.util.Collection;
public class Main {
public static void main(String[] args) {
Integer[] arr=new Integer[]{1,2,3};
ArrayList<Object> al=new ArrayList<>();
addToCollection(arr, al);
}
static <T> void addToCollection(T[] a, Collection<T> c)
{
for(T o:a)
c.add(o);
}
}
は、それはすべきではない:
...
static <T> void addToCollection(T[] a, Collection<? super T> c)
を...?
通話中にタイプTが同じであってはなりませんか?
コメントの中で述べたように、私の質問は「どのタイプがTに推論されるか」です。コードが動作しているので、階層の「上位」型が推測されると仮定します。
同じものは何ですか? – shmosel
あなたが 'Bicycle'の配列を持っているならば、' Vehicle'のコレクションにそれを加えることはできませんか? – chrylis
彼は 'ArrayList