48 votes

Pourquoi getSelectedItem () sur JComboBox n'est-il pas générique?

JCombobox dans Java 7 a été mis à jour pour utiliser les génériques, j'ai toujours pensé que c'était un peu d'un oubli qu'il n'a pas déjà si j'ai été heureux de voir ce changement.

Toutefois, lorsque vous essayez d'utiliser JCombobox de cette façon, j'ai réalisé que les méthodes que j'attendais à l'utilisation de ces types génériques encore juste retour Object.

Pourquoi diable est-ce? Il semble comme une bête décision de conception pour moi. Je me rends compte de la sous-jacentes ListModel a un générique getElementAt() méthode donc je vais l'utiliser à la place - mais c'est un peu une façon détournée de faire quelque chose qui semble comme il pourrait avoir été modifié à la JComboBox lui-même.

58voto

jarnbjo Points 18238

Je suppose que vous vous référez getSelectedItem()?

La raison en est que si la zone de liste déroulante modifiable, l'élément sélectionné n'est pas nécessairement contenue dans la sauvegarde de modèle et ne pas être limité pour le type générique. E. g. si vous avez un modifiable JComboBox<Integer> avec le modèle [1, 2, 3], vous pouvez toujours taper "foo" dans le composant et getSelectedItem() retournera la Chaîne "toto" et non un objet de type Integer.

Si le combo n'est pas modifiable et vous êtes sûr qu'un élément est sélectionné, vous pouvez toujours vous reporter à l' cb.getItemAt(cb.getSelectedIndex()) pour atteindre le type de sécurité.

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