在Scala中,如何创建TypeTag[Map[A,B]],而只有TypeTag[A]和TypeTag[B]可用?

在Scala中,如何创建TypeTag[Map[A,B]],而只有TypeTag[A]和TypeTag[B]可用?,scala,type-erasure,Scala,Type Erasure,假设类型A和B在运行时都被擦除且未知 有没有一种方法可以构造TypeTag[Map[a,B]] 最好只使用显式构造函数,就像在我的实际代码中一样,A和B都是通配符(可以将类型参数分配给调用它们的两个函数,但为什么要在只使用一次的情况下提取两个方法呢) 谢谢你的想法。如有任何建议,我们将不胜感激 最好只使用显式构造函数,就像在我的实际代码中一样,A和B都是通配符 不完全清楚,但您的意思是您有tagA:TypeTag[\u]和tagB:TypeTag[\u]?如果是这样的话,那你就可以做了 (tag

假设类型A和B在运行时都被擦除且未知

有没有一种方法可以构造TypeTag[Map[a,B]]

最好只使用显式构造函数,就像在我的实际代码中一样,A和B都是通配符(可以将类型参数分配给调用它们的两个函数,但为什么要在只使用一次的情况下提取两个方法呢)

谢谢你的想法。如有任何建议,我们将不胜感激

最好只使用显式构造函数,就像在我的实际代码中一样,A和B都是通配符

不完全清楚,但您的意思是您有
tagA:TypeTag[\u]
tagB:TypeTag[\u]
?如果是这样的话,那你就可以做了

(tagA, tagB) match {
  case (tagA: TypeTag[a], tagB: TypeTag[b]) =>
    implicit val tagA1 = tagA
    implicit val tagB1 = tagB
    typeTag[Map[a, b]]
}
有点难看和陈词滥调,但我认为目前没有更好的方法(如果没有,我会很高兴学习)

最好只使用显式构造函数,就像在我的实际代码中一样,A和B都是通配符

不完全清楚,但您的意思是您有
tagA:TypeTag[\u]
tagB:TypeTag[\u]
?如果是这样的话,那你就可以做了

(tagA, tagB) match {
  case (tagA: TypeTag[a], tagB: TypeTag[b]) =>
    implicit val tagA1 = tagA
    implicit val tagB1 = tagB
    typeTag[Map[a, b]]
}

有点难看和陈词滥调,但我认为目前没有更好的方法(我也很乐意学习其他方法)。

是的,你的答案很完美,我不知道类型参数可以用在这样的case表达式中,但我还发现你的解决方案在稍微不同的情况下不起作用,请看是的,你的答案很完美,我不知道类型参数可以用在这样的case表达式中,但我还发现您的解决方案在稍微不同的情况下无法工作,请参阅