scala.Long
不是Ordering
。类型绑定K <: Ordering[K]
意味着K
应该以Ordering
类型为界。而scala.Long
绝对不会延伸类型Ordering
。存在Ordering[Long]
的实例,但scala.Long
未扩展它。
你想要的是一个Ordering[K]
的证据,即一个上下文绑定。事情是这样的:
case class KVPair[K : Ordering , VV](key: K, value: VV)
def createKVPair(): KVPair[Long, Long] = {
KVPair(1L, 1L)
}
上述案例类是语法糖:
case class KVPair[K, VV](key: K, value: VV)(implicit ev: Ordering[K])
您可能已经注意到,我还删除约束Serializable
。这是因为Long
不是Serializable
,所以它不可能用这个约束。
scala> implicitly[Long <:< Serializable]
<console>:26: error: Cannot prove that Long <:< Serializable.
implicitly[Long <:< Serializable]
我认为这是因为'长'不是'订购'。你尝试过'K <%Comparable'吗? –
我相信B. Kemmer是对的。 Long是按定义排序的,Ordering从Serializable继承。这是超越我为什么这不起作用。 –
的确如此。所以龙不会延长订购 –