2

スーパークラスが具体的なインスタンスの型にアクセスできるようにするにはどうすればよいでしょうか?

class Base {
  val t = typeOf[this.type]
}

class X extends Base {
}

assert((new X).t =:= typeOf[X]) <-- fails!!!

つまり、Base.t はインスタンスの具体的な型を反映する必要があるという考えです...

4

2 に答える 2

0

tメソッドを作成し、それをジェネリックにするのはどうですか。

  import scala.reflect.runtime.universe._
  class Base {
    def myActualType[T <: Base](b: T)(implicit tt: TypeTag[T]) = typeOf[T]
  }
  class Foo extends Base 
  class Bar extends Foo 
  val bar = new Bar
  assert(bar.myActualType(bar) =:= typeOf[Bar])

欠点は、呼び出すときに常にオブジェクト参照を送信する必要があることですが、必要なものは得られます。

于 2015-12-16T11:16:56.817 に答える