Merungkai kabus kovarians dan kontravarian: Mempermudahkan matriks
Walaupun selepas berunding dengan banyak maklumat, pemahaman tentang kovarians dan kontravarians, terutamanya hubungan mereka dengan "input/output", masih mengelirukan. Untuk mentafsirkan konsep ini, mari kita pecahkan takrifan dan aplikasinya langkah demi langkah.
Kovarian dan kontravarian
Kovarian membenarkan penggunaan jenis "lebih luas" (kurang khusus) dalam API dan bukannya jenis primitif yang hanya digunakan sebagai "output" (cth. nilai pulangan). Contravariance, sebaliknya, membenarkan jenis "lebih sempit" (lebih khusus) digunakan sebagai ganti jenis primitif dalam API yang hanya digunakan sebagai "input" (contohnya, parameter).
Kaitkan kovarians/kontravarians dengan input/output
Perbezaan antara "input/output" kira-kira sepadan dengan kontravarians dan kovarians masing-masing. Walau bagaimanapun, perhubungan ini bergantung pada sama ada jenis generik digunakan sebagai parameter kaedah atau nilai pulangan.
Input/output parameter kaedah
Apabila jenis generik digunakan sebagai parameter kaedah, peraturan "contravariance" digunakan. Ini bermakna kaedah boleh menerima parameter jenis yang lebih khusus daripada jenis generik yang ditentukan. Contohnya:
<code>interface MyInterface<in T> { T MyFunction(T variable); }</code>
Dalam kes ini, parameter jenis Derived boleh diluluskan walaupun MyFunction menjangkakan parameter jenis Base.
Input/output nilai pulangan
Apabila jenis generik digunakan sebagai nilai pulangan kaedah, peraturan "kovarian" digunakan. Kaedah boleh mengembalikan nilai jenis yang lebih umum daripada jenis generik yang ditentukan. Contohnya:
<code>interface MyInterface<out T> { T MyFunction(int variable); }</code>
Dalam kes ini, MyFunction boleh mengembalikan nilai jenis Base walaupun ia mengembalikan nilai jenis Derived.
Fahami prinsipnya
Kovarian nilai pulangan memastikan bahawa kaedah mengembalikan jenis yang lebih umum boleh secara tersirat diberikan kepada pembolehubah jenis generik yang ditentukan. Kontravarian parameter menjamin bahawa kaedah yang menerima jenis parameter yang lebih khusus masih boleh dipanggil dengan parameter jenis generik yang ditentukan.
Kesimpulan
Menguasai kovarians dan kontravarians memerlukan pemahaman kehalusan keserasian jenis. Dengan memahami cara konsep ini berkaitan dengan perbezaan input/output, anda boleh memanfaatkan generik dengan berkesan untuk meningkatkan fleksibiliti dan keselamatan kod anda.
Atas ialah kandungan terperinci Kovarians dan Kontravarian: Bagaimanakah Jenis 'Masuk' dan 'Keluar' Mempengaruhi API Generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!