【发布时间】:2017-10-05 05:42:39
【问题描述】:
这是我想要实现的行为:
trait PathLike {
val given: String
def factory[T <: PathLike]( g: String ):T
def +[T <: PathLike]( part: String ): T = factory(this.given+"/"+part)
}
case class Path( given: String ) extends PathLike {
def factory[Path]( g: String ) = Path(g)
}
case class NonRelativePath( given: String ) extends PathLike {
def factory[NonRelativePath]( g: String ) = NonRelativePath(g)
}
我在 PathLike 中有其他使用 + 的函数,因此简单地将 + 函数移动到每个特定案例类中似乎不是一个好的选择。
目前编译器抱怨:
type mismatch; found : com.foo.Path required: Path Path.scala
type mismatch; found : com.foo.NonRelativePath required: NonRelativePath Path.scala
为什么会抱怨,因为它分别有 Path/NonRelativePath?如何从 PathLike 中构造正确类型的 PathLike 子代?
【问题讨论】:
标签: scala