[B >: A]
signifie que sorted
peut être appelé avec toute commande sur B, où B est un supertype de A.
Je suppose que A est le paramètre de type de la caractéristique elle-même, à savoir
SeqLike est définie comme SeqLike[A, This]
. Pour être exhaustif, comme SeqLike[A, +This <: SeqLike[A, This] with Seq[A]]
. Le This <: SeqLike[A, This]
est un polymorphisme à F-bounded.
trait A[T <: A[T]] {} // the type parameter to A must be an A
class C extends A[C] {} // this is how you use it.
Le actual return type of SeqLike.sorted
est This
.
Ceci est utile, car cela permet aux méthodes de SeqLike de renvoyer non seulement SeqLike
s, mais aussi des sous-types!
Pour revenir à l'exemple simple, plus tôt ...
trait Model[T <: Model[T]] {
def find(id: Int): T = ...
}
class User extends Model[User]
val model: User = new User().find(3) # no need to cast.
Je ne comprends toujours pas le besoin de 1. Pouvez-vous donner un exemple de pourquoi je devrais être capable d'utiliser un Ordering [AnyVal] pour comparer Int et pas seulement un Ordering simple [Int]. Donc, je sous-entend le quoi, je ne comprends pas le pourquoi. – Adrian
Merci pour le point 2. cependant, c'est clair maintenant! – Adrian
Si vous avez une commande [Animal], vous devriez pouvoir trier une liste [Chien]. –