Création de tableaux avec des génériques
Problème :
Comprendre les limites des génériques lors de la création de tableaux et du sous-jacent raisons pourquoi.
Contexte :
Les tableaux et les génériques présentent des différences fondamentales, notamment la réification et l'application de type.
Explication :
Tableaux vs. Génériques :
- Les tableaux sont réifiés, ce qui signifie qu'ils conservent leurs informations de type au moment de l'exécution.
- Les génériques ne sont pas réifiés, ce qui signifie que leurs informations de type sont effacées lors de la compilation.
Type Covariance :
- Les tableaux sont covariants, permettant l'affectation de tableaux d'un type de superclasse à des tableaux d'un type de sous-classe.
- Les génériques sont invariants, interdisant de telles affectations.
Type d'application Vérifiez :
- Les génériques fournissent une vérification de type plus stricte au moment de la compilation pour éviter les erreurs d'exécution.
- Les tableaux utilisent Array Store Check au moment de l'exécution pour garantir la compatibilité des types.
Problème avec le tableau générique Création :
- La création de tableaux avec des types de composants génériques n'est pas sûre car les informations sur le type d'exécution sont inconnues, ce qui entraîne de potentielles ArrayStoreExceptions.
Exception pour les caractères génériques illimités. Types :
- Tableaux de types de caractères génériques illimités (par exemple, List>[]) sont autorisés car ils sont réifiables et autorisent toute affectation d'objet.
Solution de contournement pour E[] :
- Utilisez la méthode Array#newInstance() pour créer un tableau du type générique souhaité, en le convertissant en nécessaire.
Conclusion :
La création de tableaux génériques est limitée en raison des différences fondamentales de comportement entre les tableaux et les génériques. Les mécanismes d'application de type sous-jacents et les implications en matière de sécurité doivent être soigneusement pris en compte lorsque vous travaillez avec des tableaux et des génériques.
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!