我的一個類是泛型的,並將iv
定義爲MHashMap[DateTime, T]
。 MHashMap
是scala.collection.mutableHashMap
的別名。然後,我用這個代碼暴露最少搜尋功能沒有爲Int定義的隱式排序(Scala)
def minimum: BigDecimal = {
iv match {
case dtMcM: MHashMap[DateTime, MyCustomClass] => dtMcM.minBy(_._2.bdField)._2.bdField
case dtBdM: MHashMap[DateTime, BigDecimal] => dtBdM.minBy(_._2)._2
case dtDlM: MHashMap[DateTime, Double] => dtDlM.minBy(_._2)._2.toBigDecimal
case dtItM: MHashMap[DateTime, Int] => dtItM.minBy(_._2)._2
case _ => throw new IllegalArgumentException("Unsupported underlying type")
}
}
但是編譯抱怨:
No implicit Ordering defined for T with Int.
case dtItM: MHashMap[DateTime, Int] => dtItM.minBy(_._2)._2
與同爲Double
和BigDecimal
案件。
編譯器如何甚至不能識別Int
來應用默認排序?好奇的是,它似乎沒有任何問題與我自己的自定義類的BigDecimal字段。
我不確定是什麼導致了錯誤,但上面的代碼不幸的是由於類型擦除不起作用。不能在類型參數上「匹配」,只能在類型構造函數上匹配。 – Owen 2012-02-27 14:20:08