在 Scala 中,是否可以实例化泛型类型 T 的对象?

cod*_*ark 2 generics reflection types scala scala-reflect

在 Scala 中,即使解决方案不优雅,是否可以实例化/创建泛型类型 T 的新对象?是否可以使用反射来实现这一点?

例如,我对以下内容感兴趣:

    case class Person(name: String, age: Int)
Run Code Online (Sandbox Code Playgroud)

假设我想执行以下操作来创建一个 Person 类型的对象:

    def createObject[T](fieldValues: Seq[Any]): T = {
        ... T(fieldValues)
    }

    val person = createObject[Person](Seq("Bob", 20))
Run Code Online (Sandbox Code Playgroud)

Jör*_*tag 8

不,这是不可能的。T是一个参数。你不知道什么了。你甚至不知道这是否可以被实例化可言。它可能是一个特征或一个抽象类或一个单例类型或一个复合类型。

这就是参数多态性的全部意义所在。编写不需要了解它正在处理的类型的任何代码的代码。

举个例子,像这样调用你的方法是完全合法的:

val goodLuck = createObject[Nothing](Seq(1, 2))
Run Code Online (Sandbox Code Playgroud)

那么,Nothing是字面定义为“不能有一个实例的类型”。你将如何实例化这个?