Scala 使用字符串定义泛型类型

Scala 使用字符串定义泛型类型,scala,Scala,如何用字符串定义泛型?例如,如果我想写 def createMap(foo: String, bar: String) = { Map[foo, bar]() } val myMap = createMap("String", "Int") 如何将foo和bar转换为正确的类型?我在文档中没有看到太多关于这方面的内容 看: def createMap[foo, bar] = { Map[foo, bar]() } val myMap = createMap[`String`

如何用字符串定义泛型?例如,如果我想写

 def createMap(foo: String, bar: String) = {
   Map[foo, bar]()
 }

 val myMap = createMap("String", "Int")
如何将foo和bar转换为正确的类型?我在文档中没有看到太多关于这方面的内容

  • 看:

    def createMap[foo, bar] = {
      Map[foo, bar]()
    }
    
    val myMap = createMap[`String`, `Int`]
    
    它看起来与所需的代码类似吗

  • 如果您确实希望在运行时创建一个映射,并且在编译时使用未知的类型,那么您可以简单地使用
    map[Any,Any]()
    +类型转换。我认为用字符串类型标识符实现类型安全是不可能的。 (要获取用于运行时检查的类,请参阅)

  • 这似乎是可以使用的。但是,我不是提供实现的专家


  • 泛型的全部要点是在编译时是类型安全的。您正试图克服这一点。那么,您希望
    createMap
    的返回类型是什么呢?您可以使用宏来实现这一点(如果您需要,我将给您一个示例),但要知道字符串必须是文本才能工作。请描述您的用例,我们可能会给您另一个解决方案。用例:Map[Foo,Bar](f->Bar(f)),其中Foo和Bar是要加载的类(通过上下文加载器或隐式参数),因此,createMap(“Foo”,“Bar”)(“Foo”)。您可以为类加载器创建镜像;您能否将符号导入currentMirror以有效地对其进行操作?所以,是的,反射试图打破编译时和运行时类型安全之间的简单区别。只需询问ClassTag.+1就可以替换示例中的内容。尤其是背部的滴答声。