2009-07-29 5 views
1

J'ai une classe Foo avec la sous-classe SubFoo, une classe de collection FooListing.Construction d'une classe java générique où T est une classe foo ou une sous-classe de foo

Je veux créer un générique FooListing<T>T est soit Foo ou une sous-classe de Foo

du libellé de la documentation (sous la rubrique 'Wildcards'), il semble que

public class FooListing<T extends Foo> { ... } 

.. .would laissez-moi utiliser FooListing<SubFoo>, mais pas FooListing<Foo>, est-ce correct?

Répondre

3

Non, vous êtes déjà bien - ce que vous avez permis T être Foo.

J'ai essayé de trouver le bit correspondant de la spécification, mais malheureusement, il est extrêmement opaque :(Il fonctionne vraiment bien!

+0

D'accord, cela fonctionne dans la pratique, je ne pouvais pas trouver quelqu'un indiquant explicitement celui-ci – brasskazoo

+0

Oui, cela fonctionnera, le T générique deviendra un Foo une fois compilé, donc vous pouvez utiliser n'importe quel T qui étend Foo (ou même Foo lui-même) en raison des règles de l'affrontement Si vous ne le faites pas Définissez n'importe quel supertype pour le paramètre de type générique, il deviendra un objet lors de la compilation, car vous voulez autoriser chaque type pour votre classe, donc il doit être castable à n'importe quel type et seul Object est capable de le servir. – Hurix

Questions connexes