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

标签 scala generics reflection types scala-reflect

<分区>

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

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

    case class Person(name: String, age: Int)

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

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

    val person = createObject[Person](Seq("Bob", 20))

最佳答案

不,这是不可能的。 T 是一个参数。你对它一无所知。您甚至不知道它是否可以实例化根本。它可能是特征或抽象类或单例类型或复合类型。

这就是参数多态性的重点。编写无需了解所处理的类型的任何代码。

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

val goodLuck = createObject[Nothing](Seq(1, 2))

好吧,Nothing 字面上定义为“不能有实例的类型”。你打算如何实例化它?

关于scala - 在 Scala 中,是否可以实例化泛型类型 T 的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63299269/

相关文章:

scala - 在 Scala 中输入 Lambda : why is the extra parentheses needed in a declaration?

parsing - Scala 解析器和隐式有序转换

Java泛型函数获取JSON

java反射获取特定声明的字段值作为String

Java - 在类上强制实例化

scala - 是否有可能使过滤器将附加值传递给 scala 中的映射?

scala - Akka Stream 在 Flow 中使用 HttpResponse

C# 在运行时获取定义字典的类型

c# - 具有子泛型类型的泛型工厂方法

asp.net-mvc-2 - 将/action/1,2,3 绑定(bind)到List<int>