243 votes

En quoi consiste le point d’interrogation dans les génériques de Java ' moyenne de paramètre de type ?

Il s’agit d’un petit extrait de code provenant de certains des exemples qui accompagnent l’analyseur de Stanford. J’ai développé en Java depuis environ 4 ans, mais n’ont jamais eu une très bonne connaissance de ce que ce style de code est censé pour indiquer.

Je ne suis pas inquiet pour les détails du code. Ce que j’ai me laissent perplexe, c’est ce qu’exactement l’expression générique est censé pour véhiculer, en anglais.

Quelqu'un peut-il expliquer cela à moi ?

249voto

Powerlord Points 43989
? extends HasWord

signifie "Une classe ou interface qui s'étend au - HasWord." En d'autres termes, HasWord lui-même ou l'un de ses enfants... en fait tout ce qui serait de travailler avec instanceof HasWord plus null.

Sur un plan plus technique, ? extends HasWord est bornée générique, visés à l'Article 28 de Efficace Java 2nd Edition, commençant à la page 134. C'est une partie du chapitre sur les médicaments Génériques disponibles en ligne sous forme de PDF.

Mise à jour: lien PDF a été mis à jour depuis Oracle supprimé il y a quelques temps. Il pointe désormais à la copie hébergé par l'Université Queen Mary de Londres, l'École de l'Ingénierie Électronique et de l'Informatique.

73voto

Jherico Points 12554

Un point d’interrogation est un signifiant « tout type ». ``seul moyen

Toute extension de type (dont )

C’est votre exemple ci-dessus

N’importe quel type d’étendre ou de mettre en œuvre (dont si `` est une classe non abstraite)

18voto

limc Points 14557

``accepte toutes les classes concrètes qui s’étend HasWord. Si vous avez les classes suivantes...

... la `` ne peut contenir qu’une liste soit comme ou Bs ou mélange des deux car les deux classes s’étend du même parent.

13voto

Peut-être artificiel, le "monde réel" exemple de l'aide.

Au travail, nous avons des poubelles qui viennent en différentes saveurs. Toutes les cellules contiennent des ordures, mais certains bacs sont spécialisés et ne prennent pas tous les types de déchets. Nous avons donc Bin<CupRubbish> et Bin<RecylcableRubbsih>. Le type de système doit s'assurer que je ne peux pas mettre mon HalfEatenSandwichRubbish dans l'un de ces types, mais il peut aller dans un général poubelle `Bin<Rubbish>. Si je voulais parler d'un Bin de Rubbish qui peut être un spécialiste donc je ne peux pas mettre incompatibles ordures, alors que serait Bin<? extends Rubbish>.

(Remarque: ? extends ne signifie pas en lecture seule. Par exemple, je puis avec les bonnes précautions prenez un morceau d'ordures dans une poubelle de l'inconnu spécialité et, plus tard, de le mettre dans un endroit différent.)

Pas sûr de savoir comment beaucoup de qui aide. Pointeur de pointeur en présence de polymorphisme, ce n'est pas évident.

8voto

jjnguy Points 62123

En anglais :

C’est un d’un certain type qui étend la classe , y compris``

En général les dans les génériques signifie n’importe quelle classe. Et le spécifie que cet objet doit s’étendre `` (ou qui se classe).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X