我想限制A
和B
类型的联合类型的参数,其中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]
}
现在,我可以接受Foo(5)
,但不能将Baz("a")
放在Bar
,编译器尖叫:error: could not find implicit value for parameter ev: FooOrBaish[Baz]
。
我在哪里可以指定子类型关系?
答案 0 :(得分:1)
将FooOrBaish的类型更改为逆变,并且可以正常工作
class FooOrBaish[-A]