Scala: cannot declare reference to function using supertypes
Apologies for the noob question, but I'm very new to Scala.
I have the following Scala class:
class Test {
class Request {def getValue(): String = {"request"}}
class Response {def getValue(): String = {"response"}}
case class MyRequest(message: String) extends Request
case class MyResponse(message: String) extends Response
val myFunction: (Request) => Response = doSomething
private val functions = scala.collection.mutable.Map[String, (Request)
=> Response](
"myFunction" -> myFunction
)
def doSomething(request: MyRequest): MyResponse = {
null
}
}
Which fails to compile with the following error:
type mismatch;
found : Test.this.MyRequest => Test.this.MyResponse
required: Test.this.Request => Test.this.Response
val myFunction: (Request) => Response = doSomething
It works if I change the declaration of myFunction and functions to:
val myFunction: (MyRequest) => MyResponse = doSomething
private val functions = scala.collection.mutable.Map[String, (MyRequest)
=> MyResponse](
"myFunction" -> myFunction
)
But this isn't what I want -- I want to be able to add other functions,
with different concrete types (which all extend Request or Response), to
the map. So I'd like to declare the map as taking any subclass of Request
or Response.
Any idea what I'm doing wrong here?
No comments:
Post a Comment