Scala 如何定义“通用参数”;在飞行中;?

Scala 如何定义“通用参数”;在飞行中;?,scala,generics,Scala,Generics,如何定义通用参数“动态”? 示例: 我有一些方法def get[T](名称:String) 简单案例类 case class User(name: String, password: String, age: Option[Int]) 然后我得到我所有的案例访问器 def getMethods[T: TypeTag] = typeOf[T].decls.sorted.collect { case m: MethodSymbol if m.isCaseAccessor => m

如何定义通用参数“动态”?
示例:
我有一些方法
def get[T](名称:String)

简单案例类

case class User(name: String, password: String, age: Option[Int])
然后我得到我所有的案例访问器

def getMethods[T: TypeTag] = typeOf[T].decls.sorted.collect {
    case m: MethodSymbol if m.isCaseAccessor => m
  }.toList

val caseAccessors = getMethods[User]
我需要对每个访问器方法调用
get
方法,并通过accessorMethod返回类型对其进行参数化

例如:

caseAccessors.map{accessorMehtod => get[accessorMehtod.returnType](accessorMehtod.name)}

有什么方法可以这样做吗?

正如它在对您的问题的评论中所说的那样-不可能在编译时从对象的运行时反射中提取类型-因此您失去了所有类型检查(并且可能必须在某个地方执行
的安装)

但是,根据您的需要,您可以选择一些类型安全的替代方案,比如使用,它也可以允许您按名称访问字段,但使用类型安全的方式。因此,只有
HList[String::String::Option[Int]]
(其中存储了所有字段类型),而不是
List[Method]


您还可以轻松地将记录转换为case类:
User(userRecord(“name”)、userRecord(“passbrow”)、userRecord(“age”)
。但这都需要可能的字段名(“name”、“password”等)应该在编译时知道。

我不太明白。如果使用运行时反射调用方法,则不需要提供泛型类型-泛型在运行时被删除。泛型是纯编译时构造,它们提供类型安全性。您所做的操作本质上是不安全的,需要显式转换。泛型e没有用。