8
votes

Qu'est-ce que ce paradigme Generic Generic Java et comment s'appelle-t-il?

Je regarde certaines classes Java qui ont le formulaire suivant: xxx

mon utilisation de "comparable" ici est juste pour illustrer une utilisation possible du paramètre générique "E". Cette utilisation des génériques / héritage a-t-elle un nom? Qu'est-ce qu'il est utilisé?

Mon impression est que cela permet à la classe abstraite de fournir une mise en œuvre commune d'une méthode (telle que comparète) sans avoir à le fournir dans les sous-classes. Toutefois, dans cet exemple, contrairement à une méthode héritée, il limiterait les sous-classes à invoquer des comparaisons sur d'autres instances de la même sous-classe, plutôt que de la sous-classe "A". Est-ce que ce son est vrai?

Quoi qu'il en soit, juste curieux, si des gourouies qui l'ont vu avant et sachent ce qu'elle fait.

Merci!


0 commentaires

3 Réponses :


4
votes

en C ++, il est connu sous le nom de Modèle de modèle curieusement récurrent (CRTP). Je ne sais pas si cela a un nom différent de Java (ou même s'il a un nom), mais cela servira probablement des objectifs similaires.


6 commentaires

Cette page wiki a essentiellement l'explication que je cherchais, merci! J'ai trouvé la note sur le polymorphisme "statique" de compilation "statique" plutôt intéressant.


Il y a une belle discussion orientée Java ici: madbean.com/2004/MB2004-3 Recherchez la rubrique "Plus d'astuces avec les paramètres de type"


URLS doit être inclus dans une réponse pour la lecture supplémentaire uniquement . Cette réponse semble s'appuyer fortement sur le contenu d'une URL et bénéficierait d'un résumé de l'URL inclus dans la réponse.


@Duncan c'est précisément comment l'URL est utilisée ici. Vous remarquerez que le texte de la superposition est «Curieusement récurrent le modèle de modèle», qui est tout vous devez aller effectuer des recherches sur ce sujet. Donc, il ne fait pas "compter fortement sur le contenu d'une URL" (peu importe ce que cela signifie) quoi que ce soit. Cette réponse n'est donc pas une place pour un tutoriel sur CRTP. Cela dit, puisque toute cette réponse fait nommer le modèle, j'hésiterais à l'appeler strictement terminé.


Il n'est pas presque utile dans Java. Les génériques de Java sont sur la sécurité du type. Il n'y a presque aucune circonstance lorsque cela aurait une prestation de sécurité de type par rapport à Classe A . Les modèles C ++ n'ont pas de sécurité de type; C'est complètement différent.


@Newacct C ++ Les modèles n'ont pas de sécurité de type ... s'il vous plaît éclairer moi.



1
votes

Je crois que cela est généralement appelé un type générique récursif. Comme le souligne Tom Hawtin, vous voulez probablement que la classe A >. L'utilisation la plus importante de ce modèle est Java.Lang.enum (que vous saviez probablement que vous envisagez de choisir votre interface comparable comme une interface).


1 commentaires

Non tu ne voudrais pas. Vous devriez simplement utiliser classe A .



0
votes

Il n'a pas de nom et il n'est généralement pas utile. Probablement la personne qui l'a écrit n'a pas réalisé qu'ils pouvaient l'écrire comme ça à la place:

class A<E> implements Comparable<E>


0 commentaires