Maison > Java > javaDidacticiel > Comment le modèle de modèle curieusement récurrent (CRTP) peut-il résoudre les limitations des variables de type Java ?

Comment le modèle de modèle curieusement récurrent (CRTP) peut-il résoudre les limitations des variables de type Java ?

Mary-Kate Olsen
Libérer: 2024-12-14 03:36:14
original
448 Les gens l'ont consulté

How Can the Curiously Recurring Template Pattern (CRTP) Solve Java's Type Variable Limitations?

Variables de type pour référencer les types actuels

Dans la programmation orientée objet, il est souvent souhaitable de faire référence au type de l'instance actuelle dans les méthodes ou les fonctions. Cependant, en Java, les variables de type ne sont pas autorisées à faire référence au type de la classe dans laquelle elles sont déclarées, ce qui conduit à des situations dans lesquelles le comportement souhaité ne peut pas être atteint.

Contourner les limitations des variables de type

Pour surmonter cette limitation, un modèle complexe a émergé appelé « Modèle de modèle curieusement récurrent » (CRTP). Ce modèle implique la création d'une structure de classe hiérarchique dans laquelle chaque niveau de la hiérarchie définit un contrat pour renvoyer le type d'exécution de ses instances :

Classe de base auto-typée

abstract class SelfTyped<SELF extends SelfTyped<SELF>> {

   abstract SELF self();
}
Copier après la connexion

Cours d'extension intermédiaires (Résumé)

public abstract class MyBaseClass<SELF extends MyBaseClass<SELF>>
extends SelfTyped<SELF> {

    MyBaseClass() { }

    public SELF baseMethod() {

        //logic

        return self();
    }
}
Copier après la connexion

Classes d'implémentation de feuilles (finales)

public final class MyLeafClass extends MyBaseClass<MyLeafClass> {

    @Override
    MyLeafClass self() {
        return this;
    }

    public MyLeafClass leafMethod() {

        //logic

        return self(); //could also just return this
    }
}
Copier après la connexion

Utilisation du modèle

MyLeafClass mlc = new MyLeafClass().baseMethod().leafMethod();
AnotherLeafClass alc = new AnotherLeafClass().baseMethod().anotherLeafMethod();
Copier après la connexion

Précautions et Limitations

Le modèle CRTP n'est pas sans pièges et limites :

  • Possibilité d'utilisation abusive : Le modèle peut être utilisé à mauvais escient si les types sont en dehors de ceux prévus tentative de hiérarchie d'implémenter SELF avec un type incorrect ou trompeur.
  • Public limité Extensibilité : Pour éviter toute utilisation abusive, il est recommandé de garder le package des classes intermédiaires privé et d'éviter de les étendre publiquement.
  • Sucre syntaxique : En fin de compte, le modèle CRTP ne fournit que du sucre syntaxique et ne contourne pas vraiment les limitations du type variables.

Conclusion

Le modèle CRTP offre une solution de contournement pour référencer le type actuel à l'aide de variables de type, mais il est important d'examiner attentivement ses implications et son utilisation. cela avec parcimonie. Il s'agit d'un modèle complexe qui nécessite une mise en œuvre minutieuse et doit être réservé aux cas où ses avantages l'emportent sur la complexité supplémentaire.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal