Ini adalah salah satu lubang utama dalam generik Java, array adalah kovarian , artinya array tipe Foo[]
adalah subclass dari Object[]
dan ParentOfFoo[]
. Bandingkan ini dengan List<Foo>
yang tidak memiliki perilaku ini.
Ini penting ketika Java tidak memiliki obat generik (sampai Java 5) karena jika tidak, sesuatu seperti fungsi penyortiran generik tidak mungkin.
Namun memiliki masalah yang rumit ini, array ingin mengetahui apa tipe mereka saat runtime . Namun obat generik di Jawa didasarkan pada tipe erasure. Kedua hal ini tidak saling berhubungan dengan baik dan di situlah kita mendapatkan masalah kita.
Jadi panjang dan pendeknya adalah, di Jawa 1, array kovarian mengisi sebagian lubang yang dibuat oleh kurangnya obat generik. Namun ketika mereka mencoba mengisi lubang ini dengan benar, kompatibilitas ke belakang berarti bahwa array sangat tidak mungkin untuk diimplementasikan.
Bahkan, lelaki yang benar-benar menciptakan kerangka kerja untuk obat generik, Martin Odersky, membicarakan hal ini di sini selama wawancara tentang mengapa dia membuat Scala. (Cukup menarik jika Anda tertarik pada sejarah Scala sama sekali)