我可以在 Scala 中使用具体类型覆盖类型参数化方法吗?

Wen*_* Li 4 polymorphism scala traits

我想通过将具体类型分配给类型参数来覆盖类型参数化方法,类似于下面的代码。

trait A {
  def amethod[T](x: T): T
}
trait B extends A {
  def amethod(x: String): String = x ++ x
}
Run Code Online (Sandbox Code Playgroud)

但是编译器给出了amethod overrides nothing. 我不能把[String]amethod在性状B的,因为语法就意味着命名字符串不是java.lang.String类型的类型参数。我想知道我是否以及如何做这样的事情。

非常感谢。

ste*_*ino 5

amethod,正如它在 trait 中定义的那样A,是一个泛型方法,这意味着每个调用都可以应用于泛型参数。

您在 trait 中想说的B是改变表达一般性的范围,将其从调用站点移动到类定义本身。这是不可能的。

正如评论中所建议的那样,如果您想在类定义中表达一般性,则类型参数应应用于类,而不是应用于方法:

 trait A[T] {
   def amethod(x: T): T
 }

 trait B extends A[String] {
   override def amethod(x: String): String = x ++ x
 }
Run Code Online (Sandbox Code Playgroud)