La compréhension du texte rouge dans la capture d'écran est fondamentalement correcte mais pas complète. Comme @jokester l'a dit, vous n'avez pas publié l'intégralité du code. Faites attention à la partie précédente sur la ligne 561. En fait, il existe deux cas de tri TreeMap<T> ou TreeSet<T> :
a été créé avec Comparator<? super T>, alors le tri est basé sur ce Comparator
est créé sans Comparator<? super T>, alors T doit implémenter Comparable.
Donc, en regardant la situation de TreeSet<Person>, s'il est créé avec Comparator<Person>, alors Person n'a pas du tout besoin d'implémenter Comparable.
De plus, Integer lui-même implémente le type Comparable, et tous les types de base d'objets encapsulés (ainsi que Long, Double, Boolean, etc.), ainsi que String, implémentent tous Comparable, donc bien sûr, il peut être forcé .
Une dernière question pour tout le monde. Si un Comparator est utilisé lors de la création d'un TreeMap, pourquoi devons-nous spécifier le type Comparator<? super K> au lieu de Comparator<K> ou Comparator<? extends K> ? Voir un constructeur de TreeMap :
public TreeMap(Comparator<? super K> comparateur);
La compréhension du texte rouge dans la capture d'écran est fondamentalement correcte mais pas complète. Comme @jokester l'a dit, vous n'avez pas publié l'intégralité du code. Faites attention à la partie précédente sur la ligne 561. En fait, il existe deux cas de tri TreeMap<T> ou TreeSet<T> :
a été créé avec Comparator<? super T>, alors le tri est basé sur ce Comparator
est créé sans Comparator<? super T>, alors T doit implémenter Comparable.
Donc, en regardant la situation de TreeSet<Person>, s'il est créé avec Comparator<Person>, alors Person n'a pas du tout besoin d'implémenter Comparable.
De plus, Integer lui-même implémente le type Comparable, et tous les types de base d'objets encapsulés (ainsi que Long, Double, Boolean, etc.), ainsi que String, implémentent tous Comparable, donc bien sûr, il peut être forcé .
Une dernière question pour tout le monde. Si un Comparator est utilisé lors de la création d'un TreeMap, pourquoi devons-nous spécifier le type
Comparator<? super K>
au lieu deComparator<K>
ouComparator<? extends K>
? Voir un constructeur de TreeMap :public TreeMap(Comparator<? super K> comparateur);
Correct
Parce que
class Integer implements Comparable<Integer>