我已經定義了以下特點:爲什麼特質方法需要asInstanceOf和類方法不
trait Felem[T <: Felem[T]] {
def mul(that: T): T
def square: T = this.mul(this.asInstanceOf[T])
}
我也定義了基於這種特質類:
class F2elem(val coef: Boolean) extends Felem[F2elem] {
override def square: F2elem = this.mul(this)
...
}
我的問題是有關在特徵中的「方形」方法的定義中需要「asInstanceOf」。如果我刪除它,我得到以下錯誤:
error: type mismatch;
found : Felem.this.type (with underlying type Felem[T])
required: T
def square: T = this.mul(this)
- 爲什麼需要它的特質?
- 爲什麼在課堂上是不是需要?
- 它的費用在執行時間或記憶項什麼?
感謝自我類型的把戲:-) – acapola 2012-07-23 06:55:18