В качестве альтернативы вы можете использовать контекстную границу :
class Foo[T: Ordering](val v: T)
или
class Foo[T: java.util.Comparator](val v: T)
Ограничение контекста представляет собой утверждение о том, что в области видимости существует неявный порядок [T] (или java.util.Comparator [T]), когда конструктор вызывается и эквивалентен добавлению неявного параметра:
class Foo[T](val v: T)(implicit ev: Ordering[T])
Преимущество этого подхода в том, что он позволит вам использовать альтернативный порядок в зависимости от контекста:
// by default, new Foo("a", "c", "b").items == List("a", "b", "c")
class Foo[T: Ordering](xs: T*) {
val items = xs.toList.sorted
}
// with this object in scope,
// new Foo("a", "c", "b").items == List("c", "b", "a")
implicit val descending = Ordering[String].reverse