Supposons que j'ai une classe qui implémente une interface:
6 Réponses :
Eh bien, vous pouvez le déclarer une liste Pour en tirer plus loin, la liste peut stocker des objets qui implémentent l'IA. La prise est que, lorsque vous les récupérez, vous ne connaissez pas la classe d'origine sans effectuer un Exemple: P> < Pré> xxx pré> p> .getclass () code> dessus. P>
Utiliser plus d'informations peut être trouvé sur Les tutoriels Java qui ont un Leçon complète sur les génériques . P> en particulier, le section sur wildcards explique comment utiliser le s'étend code>: ? code> avec Super code> et étend code> à Spécifiez un paramètre pour être une superclasse ou une sous-classe d'une classe donnée. p> p>
Je recommande également la session de Joshua Bloch de Javaone cette année pour plus d'informations. Vraiment effacé pour moi: développeurs.sun.com.com / Apprendre / JavaoneOnline / Sessions / 2009 / PDF / ...
Qu'en est-il de:
Vous pouvez le faire avec étend code>:
Si vous vouliez dire que la classe A est implémente IA, plutôt que IB, votre code devrait alors que votre code devrait bien dire depuis tout, par définition IAS. P> Pendant ce temps, il n'y a pas de caractères génériques pour Si vous voulez dire expressément Implémente C> Code>. Il y a s'étend c> code> et c code> peut être une interface ou une classe; Cependant, ce n'est pas nécessaire pour ce que vous semblez essayer de faire. P> pour (ia item: liste) code> parce que vous ne garantissez pas que les éléments de cette liste sont a code> s, mais garantissent qu'ils sont ia code> s, puis je pense que vous avez un léger problème (je ne peux pas dire avec certitude, car Vous n'avez pas dit où se trouve ce code de traitement de la liste). Une liste a code> s. La raison de cela est expliquée dans le tutoriel de Java sur les génériques. P> p>
À quoi je pensais? Cela fonctionne parfaitement parce que dans s'étend c> c peut également être une interface. Je pensais que "étend" <=> héritage.
> La raison de cela est expliquée dans le tutoriel de Java sur les génériques. Voici le lien vers la section pertinente: docs.oracle.com/javase/ Tutoriel / Java / Génériques / Héritage.Ht ML
Une alternative qui n'a pas besoin d'utiliser la liste Étend IB> Liste CODE> public class A implements IB{
}
List<A> listOfConcreteClassA = new ArrayList<A>();
// convert to interface
List<IB> listOfInterfaceB = new ArrayList<IB>(listOfConcreteClassA)
Voulez-vous dire IA? Quand vous dites IB?