次の特性を定義しました。
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)
...
}
私の質問は、トレイトの「square」メソッドの定義に「asInstanceOf」が必要なことについてです。削除すると、次のエラーが表示されます。
error: type mismatch;
found : Felem.this.type (with underlying type Felem[T])
required: T
def square: T = this.mul(this)
- なぜ特性で必要なのですか?
- クラスで必要ないのはなぜですか?
- 実行時間やメモリの点でコストはかかりますか?