使用反射,我确定了一个事物的运行时类型,t:Type。现在我想创建一个新的 Option[t] 类型。我怎样才能做到这一点?
val t: Type = ...
val optT: Type = ??? // Option of whatever t is
为什么我想要这个:我有一个对 Type 进行操作的处理函数。在编译时我有这样的东西:
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 类型的类,它可能有一个 Object[T] 甚至 Object[Thing] 类型的成员。在运行时,假设我可以确定特定对象具有 T = BigThing,所以我想将 Option[BigThing],而不是 Option[T] 或 Option[Thing] 传递给 handler()。这就是为什么我要尝试创建 Option[BigThing] 的运行时类型。
我确实尝试了以下方法,但 Scala 不喜欢它:
val newType = staticClass(s"Option[${runtimeTypeTAsString}]")