我有一个 F 有界类型,我的目标是创建一个类型参数化的方法以便能够重用它。这是示例代码:
trait FType {
type ThisType <: FType
def deepCopy(): ThisType
}
class ConcreteType extends FType {
override type ThisType = ConcreteType
override def deepCopy(): ConcreteType = this
}
class ConcreteType2 extends FType {
override type ThisType = ConcreteType2
override def deepCopy(): ConcreteType2 = this
}
object FType {
def deepCopy[T <: FType](_type: T): T = {
_type.deepCopy()
}
/* def deepCopy2(c: ConcreteType2): ConcreteType2 = {
c.deepCopy()
}*/
def main(args: Array[String]): Unit = {
//deepCopy2(new ConcreteType2)
}
}
但是,代码无法编译。编译器抛出此错误:
Error:(29, 19) type mismatch;
found : _type.ThisType
required: T
_type.deepCopy()
我知道它与路径相关类型有关,因为_type.ThisType
它与T
.
但是,如果 F 有界类型与使用 F 有界类型的类型不完全相同,我该如何利用 F 有界类型呢?如果类型不完全相同,那是如何deepCopy2
编译的?
注意:我知道我可以deepCopy
通过对每个具体类型使用方法重载来避免使用类型参数。