Рефлексивно определяя совместимость дженериков Scala
Учитывая тип цели (скажем, List[String]
) и некоторый объект o, цель состоит в том, чтобы найти метод o с возвращаемым типом, который совместим с целевым типом.
В случае отсутствия обобщений это можно проверить, сравнив целевой тип и тип возвращаемого значения метода, используя <:<
оператор (аналог скала отражения Java isAssignableFrom
) от scala.reflect.runtime.universe
,
Этот подход не работает при наличии обобщений: например, возвращаемый тип метода def getEmptyList[T]: List[T] = Nil
не удовлетворяет List[T] <:< List[String]
, Как определить, что тип возвращаемого значенияgetEmptyList[T]
действительно совместим с List[String]
?