Powiedzmy mam następujące rodzajeJak ustalić, czy parametr typu jest podtypem cechy?
class Foo
trait Bar
Czy istnieje sposób, aby metodę, która trwa w parametrze Type, T, oraz ustalić, czy, że T jest bar? Na przykład,
def isBar[T <: Foo: Manifest] =
classOf[Bar].isAssignableFrom(manifest[T].erasure)
Niestety isBar[Foo with Bar]
jest false
ponieważ usuwanie wydaje się wymazać wstawek.
Również manifest[Foo with Bar] <:< manifest[Bar]
jest fałszywa
Czy to w ogóle możliwe?
Patrzyłem na to pytanie: How to tell if a Scala reified type extends a certain parent class?
ale odpowiedź nie działa z mieszanym w cech, ponieważ wydają się być usunięte jak wynika powyżej.
Jako przypis: 'typeTag [Foo with Bar]' jest użytecznym skrótem dla 'niejawnie [TypeTag [Foo with Bar]]' (podobnie jak 'Predef.manifest' w <2.10). –
Mówiąc o skrótach, 'typeOf [T]' jest odpowiednikiem 'typeTag [T] .tpe'. –