コードをより汎用的にするために、クラスをオブジェクトの型でパラメータ化したいと考えています。こうすることで、特定のトレイトを拡張するすべてのオブジェクトを実装する必要がなくなります。
私の目標を示す次のコードがあります。
abstract trait Foo {
def greet
}
object Coo extends Foo {
def greet = println("Coo!")
}
object Boo extends Foo {
def greet = println("Boo!")
}
class A[Fooer <: Foo] {
def moo = asInstanceOf[Fooer].greet()
}
object Main extends App {
new A[Coo.type].moo() // hopefully prints "Coo!"
}
コードは例外をスローしています:
java.lang.ClassCastException: A cannot be cast to Foo
そして、暗黙的asInstanceOf
に使用しているように見える呼び出しが原因だと思います。this
基本的に私の質問は次のとおりです。パラメータ化を介して、クラス内のタイプごとにオブジェクトのインスタンスを取得するにはどうすればよいですか?