2016-06-04 2 views
0

Предполагая, что оба типа A и B стерты и неизвестны во время выполнения.В Scala, как создать TypeTag [Карта [A, B]], в то время как доступны только TypeTag [A] и TypeTag [B]?

Есть ли способ построить TypeTag [Карта [A, B]]?

Предпочтительно использовать только явный конструктор, так как в моем реальном коде оба символа A и B являются подстановочными знаками (можно назначить параметры типа для 2 функций, вызывающих их, но зачем пытаться извлечь 2 метода, когда они используются только один раз).

Благодарим вас за идею. Любое предложение приветствуется.

ответ

2

с использованием только Предпочтительно связываться явный конструктор, как в моем реальном коде А и В являются подстановочные

Это не совсем ясно, но вы имеете в виду, что у вас есть tagA: TypeTag[_] и tagB: TypeTag[_]? Если это так, то вы можете сделать

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

Несколько некрасиво и boilerplaty, но я не думаю, что это лучший способ в настоящее время (и был бы рад узнать, в противном случае).

+0

Да, ваш ответ прекрасен, я не знаю, что параметры типа могут использоваться в случае выражения типа – tribbloid

+0

Но я также обнаружил, что ваше решение не будет работать в немного другом случае, см. Http: // stackoverflow. ком/вопросы/37634849/как к случаю матча-а-типа переменной вложенной в-родового типа – tribbloid

Смежные вопросы