我的一类是通用的,并将iv
定义为MHashMap[DateTime, T]
。 MHashMap
是scala.collection.mutableHashMap
的别名。然后我使用此代码来公开最小查找功能
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字段似乎没有任何问题。
答案 0 :(得分:2)
好吧,Int <: T with Int
。现在,如果您要使用Ordering[Int]
,那么您需要Ordering[T with Int] <: Ordering[Int]
,这意味着Ordering
必须是逆变的。不幸的是,Ordering
不是逆变的(即使它可以 - 而且它在Scalaz中)。