Scala 2.12,实例化类型参数?
已经有关于我想做什么的信息了,但还没弄清楚。我想实例化作为上下文绑定传递的类型的元素,如下所示:Scala 2.12,实例化类型参数?,scala,types,Scala,Types,已经有关于我想做什么的信息了,但还没弄清楚。我想实例化作为上下文绑定传递的类型的元素,如下所示: case class Person(name: String) case class Dog(name: String) abstract case class Message[T](result: Map[String, T]) // using Person as a type here case class PersonMessage(val result: Map[String, Per
case class Person(name: String)
case class Dog(name: String)
abstract case class Message[T](result: Map[String, T])
// using Person as a type here
case class PersonMessage(val result: Map[String, Person]) extends Message[Person](result)
// using Dog as a type here
case class DogMessage(val result: Map[String, Dog]) extends Message[Dog](result)
我当然可以实例化这些对象:
val pm: PersonMessage = PersonMessage(Map("joe" -> Person("joe")))
val dm: DogMessage = DogMessage(Map("blacky" -> Dog("blacky")))
但是我可以在泛型函数中这样做吗
// should return a PersonMessage or a DogMessage
def myfunction[T, U <: Message[T]](customName: String): U = {
U(Map(customName -> T(customName)))
}
val p: PersonMessage = myFunction[Person, PersonMessage]("joe")
val d: DogMessage = myFunction[Dog, DogMessage]("blacky")
//应返回PersonMessage或DogMessage
def myfunction[T,U T(customName)))
}
val p:PersonMessage=myFunction[Person,PersonMessage](“joe”)
val d:DogMessage=myFunction[Dog,DogMessage](“blacky”)
这个语法不起作用,但是还有其他方法可以实现吗?谢谢你的提示。问题是,通过定义类型
t
或U谢谢Joe!我唯一要做的另一件事是将基类设为类(而不是case类),因为它们是不可扩展的。
def myFunction[T, U <: Message[T]](customName: String, mkT: String => T, mkU: Map[String, T] => U): U = {
mkU(Map(customName -> mkT(customName)))
}
val p: PersonMessage = myFunction("joe", Person, PersonMessage)
val d: DogMessage = myFunction("blacky", Dog, DogMessage)