У меня возникают проблемы с сопоставлением «совместимости» между двумя типами с использованием отражения (на самом деле я пишу макрос). Например, я хочу разрешить Vector[Int] === List[Int]
. Теперь я знаю general approach. Но проблема в том, что я не могу получить параметры типа конструктора в этом случае:Получение правильных параметров конструктора типа для «уточненного» типа
import scala.reflect._
import runtime.universe._
typeOf[List[Int]].typeArgs // List(Int) OK
typeOf[List[Int] with java.io.Serializable].typeArgs // List() FAIL
Почему это проблема?
def test[A, B >: A](a: A, b: B)(implicit tt: TypeTag[B]) = {
println(s"tt = $tt")
typeOf[B].typeArgs
}
Сейчас это работает:
test(List(1, 2, 3), List(1, 2, 3)) // List(Int)
Но это не делает:
test(Vector(1, 2, 3), List(1, 2, 3)) // List()