Java - tri à l'aide de Collections.sort()
Je dois écrire une méthode pour trier les nombres Entiers et Doubles.
public ArrayList<Number> sortDescending(ArrayList<Number> al){
Comparator<Number> c=Collections.reverseOrder();
Collections.sort(al,c);
return al;
}
public ArrayList<Number> sortAscending(ArrayList<Number> al){
Collections.sort(al);
return al;
}
Le problème est que dans sortAscending, l'erreur suivante se produit:
Lié incompatibilité: Le générique de la méthode de tri(Liste) type de Collections n'est pas applicable pour les arguments (ArrayList). Le type inféré Nombre n'est pas un substitut valable pour la délimitée paramètre < T extends Comparable < ? super T>>
OriginalL'auteur user1189571 | 2012-07-16
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser un générique limite supérieure de
Number
l'intersection avecComparable<T>
:Tous JDK
Numbers
(par exempleFloat
,Integer
etc) correspondent à cette saisie.Pour les non-initiés, la syntaxe
<T extends A & B>
est la façon dont vous liéT
à les deuxA
etB
.Pour info, il n'y a pas de syntaxe pour le "ou" logique (ni ne prennent de sens que si vous pensez à ce sujet)
Pour info: Il n'y a aucune raison d'avoir un type de retour sur un de vos méthodes, comme la Liste est triée en place.
Plutôt que "aucune raison", il y a plusieurs raisons d'avoir des types de retour: A) Pour illustrer les implications de taper la méthode, B) Qu'est ce que l'OP a et C), le Retour des objets à partir de "non-getter" méthodes est effectuée lors de la mise en œuvre de la API fluent motif
OriginalL'auteur Bohemian
Vous obtenez l'erreur, car le numéro n'est pas de mettre en œuvre
Comparable<Number>
. Vous avez besoin d'ajouter un générique contstraint de sorte qu'il s'étend à la fois le nombre et Comparables. Dans ce cas:OriginalL'auteur Oskar Kjellin