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繼承。這是超越我爲什麼這不起作用。 –
的確如此。所以龍不會延長訂購 –