J'ai un ensemble de classes qui partagent tous des attributs courants, donc je les ai donc fabriqués à une classe de base commune, i Voulez aussi des listes de ces avec le message d'erreur Je pense que je pense que je tente de trier une liste des objets code> Basenentialité code> d'objets et Je sais que je pouvais éviter ce problème en supprimant le Ce que je veux vraiment faire est de préciser dans la signature de Une assistance reçue avec gratitude. Merci! P> p> baseentité (code>. Donc j'ai, par exemple,
foo prolonge la base et
et
la barre étend la baseentité code>.
FOO code> et
bar code> Objets à être triables, donc j'ai mis en œuvre
comparable code>. J'ai les classes définies comme
FOO étend la baseentité implémente des implements comparables
et
Barre de base implémente des implements comparables
foo code > s ou
bar code> S fonctionne comme prévu - et, bien sûr, les détails du tri sont différents dans les différentes sous-classes. Mais je ne peux pas comprendre comment faire mon travail de tri lorsque je ne sais pas à l'avance, si j'aurai
FOO code> S ou
bar code> s. Ce code, par exemple, ne parvient pas à compiler: p>
MisMatch lié: La méthode générique Trier (liste
base de la base code> ne pas 't Implémenter
comparable code>. Mais maintenant, je suis confronté à un problème: la seule chose sensible à fabriquer des objets code> code> comparables aux objets code> Basenentialité code>, mais lorsque j'ajoute
implémente comparable
base et code>, le compilateur me dit que j'ai des problèmes maintenant parce que mon
FOO code> tente de mettre en œuvre les deux
comparable
comparable
implémente comparable
comparable
comparèteo code> doit faire la coulée laid et je pensais que c'était exactement le type de problème utilisant des génériques était censé éviter. < / p>
baseenté code> que toutes ses sous-classes seront
comparables code>, mais uniquement aux instances de la même sous-classe. P>
4 Réponses :
Essayez ceci:
static <T extends Comparable<? super T>> sort(T[] array);
Utilisez un type d'intersection, comme celui-ci:
public class MyList<T extends BaseEntity & Comparable<T>> {...}
La classe code> MyList code> était juste un exemple pour afficher le message d'erreur. J'ai choisi un mauvais nom :-(, ce n'est pas réellement une liste de quelque chose et des instances de cette classe ont juste besoin d'effectuer le tri, pas réellement être triés eux-mêmes.
Je ne vois pas pourquoi cela changerait l'applicabilité de la réponse. :)
Parce que les génériques de Java 5 sont boiteux. L'erreur "comme essayer d'implémenter les deux comparable
comparable
Oh oui, tu as raison. Que comparable
t code>, pas sur
myList code>. Merci merci merci.
Pour de meilleurs résultats, utilisez
@newacct cn u explique ce que
@TUSUSHARBANNE: comparable code> est un consommateur et doit donc toujours être utilisé avec
? Super code> WILDCARDS, selon la règle PECS. Sans le
? Super Code> Wildcard, si vous avez une classe comparable à elle-même, sa sous-classe ne peut pas être utilisée comme
t code> ici, même si cela devrait être capable de.
N'utilisez pas collections.sort (liste
collections.sort (liste
Vous pouvez créer une méthode de tri super simple qui peut gérer à peu près n'importe quel type de liste ceci signifie que vous pouvez appeler cette méthode pour trier n'importe quelle liste tant que la liste et le comparateur données sont du même type que l'autre. Cela fonctionnerait même sans la classe de base que vous avez (baseentité) p> p>
Je suis sûr que vous voulez trier une liste d'objets, pas des types?
Vous aurez donc une liste de la barre code> ou une liste de
foo code> mais pas tous les deux dans le même? Votre
myList code> est-il plus impliqué? Sinon, cela semble être une couche inutile qui provoque votre problème.
Oui, ma liste est soit
foo code> ou
bar code>, et oui, le
myList code> est juste un échantillon du plus petit code possible qui montre le problème I 'm avoir. La vraie classe est beaucoup plus complexe.