私は最近、Pythonでの長い休止の後、型システムに再び頭を悩ませようとして、scalaに戻りました。言語に再び慣れるために、非常に単純なWebURLディスパッチャーを作成しようとしています。これまでのところ:
trait Executable {
def execute(request: HttpRequest, response: HttpResponse): Future[HttpResponse]
}
class HelloWorldHandler extends Executable {
override def execute(request: HttpRequest, response: HttpResponse) = {
Future.value(response)
}
}
私がここに持っていると思うのは、Executableインターフェースとそのインターフェースを実装するクラスに相当するscalaです。次に、次のようなハンドラーへのURLのマッピングを作成します。
val mapping: Map[String, _ <: Executable] = {
"/hello" -> new HelloWorldHandler()
}
これをコンパイルすると、次のエラーが発生します。
type mismatch;
found : (java.lang.String, pollcaster.handlers.HelloWorldHandler)
required: Map[String,pollcaster.Executable]
"/" -> new HelloWorldHandler()
^
ここでの理解がどこで間違っていたかはわかりませんが、Executableの特性を持つさまざまなクラスをマップオブジェクトに配置する方法を理解するのに役立ちますか?
TIA