我想通过将具体类型分配给类型参数来覆盖类型参数化方法,就像下面的代码一样。
然而编译器会报错:"amethod overrides nothing"。在Trait B中,我不能在amethod后面加上"[String]",因为从语法上讲,它被认为是一个类型参数名为String,而不是java.lang.String类型。我想知道是否有一种方法可以实现这样的效果。
非常感谢。
trait A {
def amethod[T](x: T): T
}
trait B extends A {
def amethod(x: String): String = x ++ x
}
然而编译器会报错:"amethod overrides nothing"。在Trait B中,我不能在amethod后面加上"[String]",因为从语法上讲,它被认为是一个类型参数名为String,而不是java.lang.String类型。我想知道是否有一种方法可以实现这样的效果。
非常感谢。
A
?如果可以,你可以将其作为类型参数T
,并使B
成为A [String]
的子类型。 - jub0bsB
违反了与A
的合同。 - Michael Zajactrait A { def amethod[T](x: T): T }; trait B extends A { def amethod[String](x: String) = x }; class C extends B {}; val c= new C(); c.amethod("Hello"); res5: String = Hello
- rogue-onec.amethod(1)
。 - Alexey Romanov