scala – 如何从泛型类型调用重载方法
发布时间:2020-12-16 18:05:00 所属栏目:安全 来源:网络整理
导读:我有这组重载函数: case class A[T](t: T)object C { def dump(a: A[String],s: String) = .... def dump(a: A[Int],s: Int) = .... def dump(a: A[Double],s: Double) = ....} 并有这个通用的方法: class B { def dump[T](a: A[T],t: T) = C.dump(a,t)}
我有这组重载函数:
case class A[T](t: T) object C { def dump(a: A[String],s: String) = .... def dump(a: A[Int],s: Int) = .... def dump(a: A[Double],s: Double) = .... } 并有这个通用的方法: class B { def dump[T](a: A[T],t: T) = C.dump(a,t) } 它不编译,因为Scala编译器与不同的重载混淆. 解决方法
基于@drexin使用ad-hoc多态性回答,我只是略微改变使用问题的签名使其更清晰一点.
def dump [T](a:A [T],t:T)= C.dump(a,t) case class A[T](t: T) trait Dumper[T] { def dump(a: A[T],t: T): Unit } class B { def dump[T](a: A[T],t: T)(implicit dumper: Dumper[T]) = dumper.dump(a,t) } implicit val IntDummper = new Dumper[Int] { override def dump(a: A[Int],t: Int): Unit = { println("int dummper processing it") } } implicit val StringDummper = new Dumper[String] { override def dump(a: A[String],t: String): Unit = { println("string dummper processing it") } } val result = new B result.dump(A("3"),"3") //string dummper processing it result.dump(A(3),3) //int dummper processing it (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |