"1", "b" => "false") 什么是实例化任何案-6ren">
gpt4 book ai didi

scala - 如何从 Map[String, String] 实例化案例类

转载 作者:行者123 更新时间:2023-12-04 03:02:46 26 4
gpt4 key购买 nike

假设我有

case class Sample(i:Int, b:Boolean) 

Map[String, String]("i" => "1", "b" => "false")

什么是实例化任何案例类的最简洁的方法(如果所有字段都在 map 中),签名如下:

 get[T](map:[String, String]) : T

可能 shapeless 可以帮助完成这个任务,但我对它几乎不熟悉。谢谢!

最佳答案

首先,您可以将 Map[String, String] 转换为 Map[Symbol, Any],然后使用类型类 shapeless.ops.maps.FromMap(或扩展方法.toRecord)和LabelledGeneric:

import shapeless.LabelledGeneric
import shapeless.record.Record
import shapeless.syntax.std.maps._

case class Sample(i: Int, b: Boolean)
val rec = Map('i -> 1, 'b -> false).toRecord[Record.`'i -> Int, 'b -> Boolean`.T].get
LabelledGeneric[Sample].from(rec) //Sample(1,false)

关于scala - 如何从 Map[String, String] 实例化案例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47723899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com