i ensure method should accept instances of a
or b
or c
. , don't want modify code of a
, b
, c
.
case class case class b case class c def method(aorborc: any) = ??? // method("toto") should not compile
you can use type class.
case class a(s: string) case class b(i: int) case class c(i1: int, i2: int) // type class trait abc[t] { def bar(t: t): string } // instances implicit object abc_a extends abc[a] { override def bar(t: a): string = "a : s = " + t.s } implicit object abc_b extends abc[b] { override def bar(t: b): string = "b : = " + t.i } implicit object abc_c extends abc[c] { override def bar(t: c): string = "c : i1 = " + t.i1 + ", i2 = " + t.i2 } def method[t](abc: t)(implicit instance: abc[t]) = println(instance.bar(abc)) method(a("aaaaa")) // => : s = aaaaa method(b(123)) // => b : = 123 method(c(9, 5)) // => c : i1 = 9, i2 = 5 method(1) // compilation error
Comments
Post a Comment