Rumah  >  Artikel  >  Java  >  Peraturan keserasian untuk generik fungsi Java

Peraturan keserasian untuk generik fungsi Java

王林
王林asal
2024-04-26 18:03:01617semak imbas

Peraturan keserasian generik fungsi Java memastikan keselamatan jenis. Peraturan termasuk: senarai parameter jenis yang sama, sempadan parameter jenis yang sama, dan parameter jenis kontravarian dan kovarian. Contohnya, 56bc093f3216b38f13a475f7fa48b608> serasi dengan 4445611b66c78394188dd2a1f2510c39>

Java 函数泛型的兼容性规则

Peraturan Keserasian untuk Generik Fungsi Java

Fungsi generik Java membenarkan kami menulis kod dalam cara yang selamat jenis, tetapi tidak mengikut peraturan keserasian yang betul boleh mengakibatkan ralat masa kompilasi. Mari kita susun peraturan untuk mengelakkan masalah sedemikian.

Peraturan 1: Senarai parameter jenis adalah sama

Hanya jenis fungsi dengan senarai parameter yang sama yang serasi. Jadi contoh berikut akan mengakibatkan ralat:

public <T> void func1(T v) {}
public <U> void func2(U v) {}

Peraturan 2: Parameter jenis mempunyai had yang sama

Bounds mentakrifkan nilai yang dibenarkan untuk jenis generik. Fungsi tidak serasi jika ia mempunyai sempadan yang berbeza untuk parameter jenis yang sama. Contohnya:

public <T extends Comparable<T>> void func1(T v) {}
public <T extends Number> void func2(T v) {}

Peraturan 3: Parameter jenis kontravarian dan kovarian

  • Contravariance: Jika jenis subkelas T boleh menggantikan jenis superclass S, maka jenis 8742468051c85b06f0a0af9e3e506b5c adalah serasi dengan 1eefd63bbe027a2807ccada294a3372c. Contohnya, 9e828ca004921c559f1a0411055a0190> serasi dengan 7e3f95175fc72649f7afad09c40191bd>.
  • 8742468051c85b06f0a0af9e3e506b5c 类型兼容于 1eefd63bbe027a2807ccada294a3372c。例如9e828ca004921c559f1a0411055a0190> 兼容于 7e3f95175fc72649f7afad09c40191bd>
  • 协变:如果超类类型 T 可以替代子类类型 S,则 1eefd63bbe027a2807ccada294a3372c 类型兼容于 8742468051c85b06f0a0af9e3e506b5c。例如f7e83be87db5cd2d9a8a0b8117b38cd4 兼容于 a87fdacec66f0909fc0757c19f2d2b1d

实战案例

考虑以下代码:

public <T extends Animal> void func1(T t) {
    // 代码...
}

public void func2(Cat c) {
    // 代码...
}

func1 期望一个 Animal 或其子类的实例。func2 期望一个 Cat 实例。由于 Cat 扩展 Animal,因此 func1 可以兼容于 func2,从而可以接收 CatKovarian: Jika jenis superclass T boleh menggantikan jenis subkelas S, maka jenis 1eefd63bbe027a2807ccada294a3372c adalah serasi dengan 8742468051c85b06f0a0af9e3e506b5c. Contohnya, f7e83be87db5cd2d9a8a0b8117b38cd4 serasi dengan a87fdacec66f0909fc0757c19f2d2b1d.

Contoh Praktikal

Pertimbangkan kod berikut:

rrreee

func1 menjangkakan contoh Animal atau subkelasnya. func2 menjangkakan contoh Cat. Memandangkan Kucing memanjangkan Haiwan, func1 serasi dengan func2 dan boleh menerima Cat Type parameter. 🎜🎜🎜Kesimpulan🎜🎜🎜Adalah penting untuk mematuhi peraturan keserasian untuk generik fungsi untuk mengelakkan ralat masa penyusunan dan memastikan keselamatan jenis. 🎜

Atas ialah kandungan terperinci Peraturan keserasian untuk generik fungsi Java. 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