Digamos que tengo los siguientes tipos¿Cómo determinar si un parámetro de tipo es un subtipo de un rasgo?
class Foo
trait Bar
¿Hay una manera de hacer un método que toma en un parámetro de tipo, T, y determinar si T es un bar? Por ejemplo,
def isBar[T <: Foo: Manifest] =
classOf[Bar].isAssignableFrom(manifest[T].erasure)
Lamentablemente, isBar[Foo with Bar]
es false
porque parece borrado para borrar mixins.
Además, manifest[Foo with Bar] <:< manifest[Bar]
es falso
Es esto posible en absoluto?
Miré a esta pregunta: How to tell if a Scala reified type extends a certain parent class?
pero esa respuesta no funciona con mixtos en los rasgos, ya que parecen ser borrado como se evidencia anteriormente.
Como nota al pie: 'typeTag [Foo with Bar]' es una abreviatura útil para 'implícitamente [TypeTag [Foo with Bar]] '(muy parecido a' Predef.manifest' en <2.10). –
Hablando de accesos directos, 'typeOf [T]' es un equivalente de 'typeTag [T] .tpe'. –