Maison > Java > javaDidacticiel > le corps du texte

Règles de compatibilité pour les fonctions génériques Java

王林
Libérer: 2024-04-26 18:03:01
original
600 Les gens l'ont consulté

Les règles de compatibilité des génériques de fonctions Java garantissent la sécurité des types. Les règles incluent : des listes de paramètres de même type, des limites de paramètres de même type et des paramètres de type contravariant et covariant. Par exemple, <List<Cat>> est compatible avec <List<Animal>> (contravariant), tandis que <String>

Java 函数泛型的兼容性规则

Règles de compatibilité pour les fonctions génériques Java

Les fonctions génériques Java nous permettent d'écrire du code de manière sécurisée, mais ne pas suivre les règles de compatibilité correctes peut entraîner des erreurs de compilation. Trions les règles pour éviter de tels problèmes.

Règle 1 : Les listes de paramètres de type sont les mêmes

Seuls les types de fonctions avec la même liste de paramètres sont compatibles. Ainsi, l'exemple suivant entraînera une erreur :

public <T> void func1(T v) {}
public <U> void func2(U v) {}
Copier après la connexion

Règle 2 : les paramètres de type ont les mêmes limites

Les limites définissent les valeurs autorisées d'un type générique. Les fonctions sont incompatibles si elles ont des limites différentes pour des paramètres du même type. Par exemple :

public <T extends Comparable<T>> void func1(T v) {}
public <T extends Number> void func2(T v) {}
Copier après la connexion

Règle 3 : Paramètres de type contravariant et covariant

  • Contravariance : Si un type de sous-classe T peut remplacer le type de superclasse S, alors le type <T> est compatible avec <S>. Par exemple, <List<Cat>> est compatible avec <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) {
    // 代码...
}
Copier après la connexion

func1 期望一个 Animal 或其子类的实例。func2 期望一个 Cat 实例。由于 Cat 扩展 Animal,因此 func1 可以兼容于 func2,从而可以接收 CatCovariance : Si le type de superclasse T peut remplacer le type de sous-classe S, alors le type <S> est compatible avec <T>. Par exemple, <String> est compatible avec <Object>.

Exemple pratique

Considérez le code suivant :

rrreee

func1 attend une instance de Animal ou de sa sous-classe. func2 attend une instance Cat. Puisque Cat étend Animal, func1 est compatible avec func2 et peut recevoir Cat Type paramètres. 🎜🎜🎜Conclusion🎜🎜🎜Il est crucial de suivre les règles de compatibilité pour les fonctions génériques afin d'éviter les erreurs de compilation et d'assurer la sécurité des types. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!