为什么Scala更喜欢隐式参数而不是扩展特征?

时间:2017-02-04 22:56:39

标签: java scala implicit-parameters

Scala排序API使用隐式对象。 e.g:

def msort[T](xs: List[T])(implicit ord: Ordering) = { ...} 

Java使用Comparable接口达到同样的目的。

public static <T extends Comparable<? super T>> void sort(List<T> list) { ... }

为什么Scala更喜欢隐式类型而不是扩展特征?隐式参数有什么好处?

1 个答案:

答案 0 :(得分:3)

  1. 对于给定类型,您可以将msort与多个Ordering一起使用。扩展Comparable的类型只能以一种方式扩展它。 (有些人认为这是一个缺点。)

  2. 您可以为在没有相关知识的情况下实现的类型提供Ordering(例如,任何Java类型!)。如果现有类型尚未扩展Comparable,则无法进行扩展{。