A extends B
написано A<:B
в Scala, а не A>:B
Кстати, система типов Scala достаточно мощная, чтобы избежать использования Object (AnyRef в Scala) в вашем коде
package v6ak.util
import java.util.Comparator
class NaturalComparator[T <: Comparable[T]] extends Comparator[T] {
override def compare(o1: T, o2: T) = {
if (o1 == null || o2 == null) {
throw new NullPointerException("Comparing null values is not supported!");
}
o1.compareTo(o2);
}
}
object StringComparator extends NaturalComparator[String]
object Examples {
StringComparator.compare("a", "b")
StringComparator.compare(2, "b") // error
}