1

我想限制联合类型AB类型的参数,其中B一些通用类型将被子类型化。我想把对象放在这个方法中:

def accept[A](a:A)(implicit ev:FooOrBaish[A]){ /* do something */}

这是,我如何指定隐式:

case class Foo(i:Int)
trait Baish
case object Bar extends Baish
case class Baz(x:String) extends Baish
class FooOrBaish[A]
object FooOrBaish{
  implicit object FooWit extends FooOrBaish[Foo]
  implicit object BaishWit extends FooOrBaish[Baish]
}

现在,我可以放入 accept ,但Foo(5)不能放在那里,编译器尖叫:。我在哪里可以指定子类型关系?Baz("a")Barerror: could not find implicit value for parameter ev: FooOrBaish[Baz]

4

1 回答 1

1

将 FooOrBaish 的类型更改为逆变的并且它可以工作

class FooOrBaish[-A]
于 2013-03-06T10:20:24.027 回答