Используя отражение, я определил тип вещи во время выполнения, t: Type. Теперь я хочу создать новый тип опции [t]. Как я могу это сделать?
val t: Type = ...
val optT: Type = ??? // Option of whatever t is
Почему я хочу этого: у меня есть функция-обработчик, которая работает с типом. Во время компиляции у меня есть что-то вроде этого:
trait Thing { name: String }
case class BigThing(name: String) extends Thing
case class Stuff[T <: Thing]( id: Int, maybeThing: Option[T] ) // contrived
def handler( t: Type ): Output = {...}
Я могу предположить, что если у меня есть класс типа Stuff, то у него есть член mayThing типа Object[T] или даже Object[Thing]. Скажем, во время выполнения я могу определить, что конкретный объект имеет T = BigThing, поэтому я хочу передать Option[BigThing], а не Option[T] или Option[Thing] в обработчик(). Вот почему я пытаюсь создать исполняемый тип Option[BigThing].
Я пробовал следующее, но Scala это не понравилось:
val newType = staticClass(s"Option[${runtimeTypeTAsString}]")
t
? - person Brian McCutchon   schedule 17.02.2019t: Type
представляет значение типаT
, вам нужен методdef makeOptionType(t: Type): Type
, который возвращаетType
, представляющий значение типаOption[T]
? - person Tim   schedule 17.02.2019