【发布时间】:2016-12-09 19:34:59
【问题描述】:
我有一个这样设置的隐式助手:
trait Helper[T] {
def help(entry: T): Unit
}
object Helpers {
implicit object XHelper extends Helper[X] {
override def help(entry: X): Unit = {println("x")}
}
implicit object YHelper extends Helper[Y] {
override def help(entry: Y): Unit = {println("y")}
}
def help[T](entry: T)(implicit helper: Helper[T]): Unit = {
helper.help(entry)
}
}
我想设置一个元素集合并在每个元素上运行help。但是,由于我们不能保证所有元素都匹配Helpers,因此下面给出了编译器错误:
val data = Seq[_](new X(), new Y())
data.foreach(entry => Helpers.help(entry))
如果我们有一个泛型类型T,我们可以使用[T: Helper] 对其强制执行隐式约束,但这不适用于_。如何强制data 的每个元素都有匹配的Helper?
【问题讨论】:
-
你能扩展类型
X和Y一个新的 trait,比如trait HasHelp? -
不,很遗憾,该代码不在我的控制范围内。
标签: scala generics wildcard implicit