Rumah >Java >javaTutorial >Bagaimanakah Kovarian, Invarian dan Kontravarian Mempengaruhi Perhubungan Jenis dalam Pengaturcaraan?

Bagaimanakah Kovarian, Invarian dan Kontravarian Mempengaruhi Perhubungan Jenis dalam Pengaturcaraan?

Barbara Streisand
Barbara Streisandasal
2024-11-12 03:28:01308semak imbas

How do Covariance, Invariance, and Contravariance Affect Type Relationships in Programming?

Kovarian, Invarian dan Kontravarian dalam Bahasa Inggeris Biasa: Penjelasan Komprehensif

Kovarian, invarian dan kontravarian ialah konsep pengaturcaraan yang menerangkan bagaimana hubungan antara jenis dan subjenis dipengaruhi oleh transformasi jenis. Konsep ini memainkan peranan penting dalam memahami polimorfisme dan keselamatan jenis dalam bahasa pengaturcaraan.

Kovarian

Kovarian menunjukkan bahawa perhubungan subjenis dipelihara oleh penjelmaan jenis. Dalam erti kata lain, jika jenis A ialah subjenis jenis B, maka jenis berubah f(A) juga merupakan subjenis f(B). Sebagai contoh, pertimbangkan penjelmaan f(A) = Senarai, di mana Senarai diisytiharkan sebagai:

class List<T> { ... }

Sejak Senarai ialah subjenis Senarai, kami mempunyai f(String) = Senarai ialah subjenis f(Objek) = Senarai. Oleh itu, f ialah kovarian.

Kontravarians

Kontravarians ialah lawan kepada kovarians. Ia menunjukkan bahawa hubungan subjenis diterbalikkan oleh penjelmaan jenis. Jika A ialah subjenis B, maka f(B) ialah subjenis f(A). Sebagai contoh, pertimbangkan penjelmaan f(A) = A[]. Transformasi membalikkan hubungan subjenis antara tatasusunan: Objek[] ialah subjenis String[], tetapi String[] bukan subjenis Objek[]. Ini menjadikan f kontravarian.

Invarian

Invarian berlaku apabila kovarians atau kontravarian tidak berlaku. Dalam erti kata lain, hubungan subjenis tidak dipelihara atau diterbalikkan oleh transformasi jenis. Sebagai contoh, pertimbangkan penjelmaan f(A) = Map. Jika A ialah subjenis B, tiada jaminan bahawa f(A) = Map ialah subjenis f(B) = Map. Oleh itu, f adalah invarian.

Aplikasi dalam Ciri Bahasa

  • Tugasan: Jenis objek dalam Java adalah invarian. Oleh itu, pernyataan tugasan ArrayList rentetan = ArrayList baharu(); adalah tidak sah tetapi Objek[] objek = Rentetan[1] baharu; adalah sah.
  • Seruan Kaedah: Seruan kaedah bergantung pada hubungan subjenis untuk semakan jenis. Kaedah kaedah(ArrayList list) boleh digunakan dengan argumen new ArrayList() tetapi bukan ArrayList() baharu.
  • Kaedah Overriding: Apabila mengatasi kaedah, jenis parameter mestilah kovarian atau invarian, manakala jenis pulangan mestilah kovarian atau invarian. Sebagai contoh, kod berikut adalah sah kerana jenis pemulangan ialah kovarian:
class List<T> { ... }

Memahami kovarian, invarian dan kontravarian adalah penting untuk memahami gelagat operasi polimorfik dan memastikan keselamatan jenis dalam pengaturcaraan.

Atas ialah kandungan terperinci Bagaimanakah Kovarian, Invarian dan Kontravarian Mempengaruhi Perhubungan Jenis dalam Pengaturcaraan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn