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

Peraturan keserasian untuk generik fungsi Java

王林
Lepaskan: 2024-04-26 18:03:01
asal
637 orang telah melayarinya

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, > serasi dengan >

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) {}
Salin selepas log masuk

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) {}
Salin selepas log masuk

Peraturan 3: Parameter jenis kontravarian dan kovarian

  • Contravariance: Jika jenis subkelas T boleh menggantikan jenis superclass S, maka jenis <T> adalah serasi dengan <S>. Contohnya, <List<Cat>> serasi dengan <List<Animal>>.
  • <T> 类型兼容于 <S>。例如<List<Cat>> 兼容于 <List<Animal>>
  • 协变:如果超类类型 T 可以替代子类类型 S,则 <S> 类型兼容于 <T>。例如<String> 兼容于 <Object>

实战案例

考虑以下代码:

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

public void func2(Cat c) {
    // 代码...
}
Salin selepas log masuk

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

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan