Saya pikir bagian Tutorial Generik ini menjelaskan situasi (penekanan saya):
"Anda perlu memastikan bahwa API generik tidak terlalu membatasi; API harus terus mendukung kontrak asli API. Pertimbangkan lagi beberapa contoh dari java.util.Collection. API pra-generik terlihat seperti:
interface Collection {
public boolean containsAll(Collection c);
...
}
Upaya naif untuk menghasilkan itu adalah:
interface Collection<E> {
public boolean containsAll(Collection<E> c);
...
}
Meskipun ini jenis aman, itu tidak sesuai dengan kontrak asli API.
Metode containAll () bekerja dengan segala jenis koleksi yang masuk. Ini hanya akan berhasil jika koleksi yang masuk benar-benar hanya berisi contoh E, tetapi:
- Tipe statis dari koleksi yang masuk mungkin berbeda, mungkin karena penelepon tidak tahu jenis yang tepat dari koleksi yang dikirimkan, atau mungkin karena itu adalah Koleksi <S>, di mana S adalah subtipe dari E.
- Sah-sah saja untuk memanggil containAll () dengan koleksi jenis yang berbeda. Rutin seharusnya bekerja, mengembalikan false. "