J'ai une classe générique:
public class ListObject<T>
{
// fields
protected T _Value = null;
// ..
}
Maintenant, je veux faire quelque chose comme ceci:
ListObject<MyClass> foo = new ListObject<MyClass>();
ListObject<MyClass> foo2 = new ListObject<MyClass>();
foo.compareTo(foo2);
Question:
Comment puis-je définir la méthode compareTo()
avec resprect au générique T
?
Je suppose que je dois en quelque sorte implémenter une contrainte sur le générique T
, pour dire que T
implémente une interface spécifique (peut-être Comparable
, si celle-ci existe).
Quelqu'un peut-il me fournir un petit exemple de code?
Lisez aussi la discussion ici: Génériques et tri en Java
Réponse courte, le mieux que vous puissiez obtenir est:
class ListObject<T extends Comparable<? super T>> {
...
}
Mais il y a aussi des raisons de simplement utiliser:
class ListObject<T extends Comparable> {
...
}
Cela dépend exactement de ce que vous voulez que la méthode compareTo fasse. Définir simplement la méthode compareTo pour prendre d'autres ListObject<T>
valeurs est effectuée par ce qui suit
public class ListObject<T> {
public int compareTo(ListObject<T> other) {
...
}
}
Cependant, si vous voulez réellement appeler des méthodes sur ce paramètre, vous devrez ajouter des contraintes pour donner plus d'informations sur la valeur T
comme ceci
class ListObject<T extends Comparable<T>> {
...
}
Essayez public class ListObject<T extends U>
. Seuls les T
s qui implémentent U
(ou dérivent de U
) seront des substitutions autorisées.