2014-07-05 13 views
5

W Scala, mam adnotację i cechę podstawową z adnotacją, ale rozszerzenie tej klasy nie dziedziczy adnotacji:Scala Adnotacja Dziedziczenie

scala> import scala.annotation.StaticAnnotation 
import scala.annotation.StaticAnnotation 

scala> case class AnnotationClass() extends StaticAnnotation 
defined class AnnotationClass 

scala> @AnnotationClass trait BaseTrait 
defined trait BaseTrait 

scala> class InheritingClass extends BaseTrait 
defined class InheritingClass 

scala> import scala.reflect.runtime.universe._ 
import scala.reflect.runtime.universe._ 

scala> typeOf[BaseTrait].typeSymbol.asClass.annotations.size 
res1: Int = 1 

scala> typeOf[InheritingClass].typeSymbol.asClass.annotations.size 
res0: Int = 0 

Czy istnieje sposób, aby uzyskać podklasa odziedziczyć adnotacja rodzica?

Odpowiedz

2

Nie jest to możliwe zgodnie z moją wiedzą. Jedyny opis zakresu adnotacji w dokumentach brzmi:

Klauzula adnotacji dotyczy pierwszej definicji lub deklaracji następującej po niej. Więcej niż jedna klauzula adnotacji może poprzedzać definicję i deklarację. Kolejność, w jakiej podane są te klauzule, nie ma znaczenia.

Prawdopodobnie oznacza to, że adnotacja dotyczy tylko pierwszej definicji następującej po niej: tylko. Oczywiście można utworzyć metodę pomocniczą, która sprawdza definicje w klasach podstawowych:

def baseAnnotations[T : TypeTag] = typeOf[T].typeSymbol.asClass.baseClasses.flatMap(_.annotations) 
baseAnnotations[InheritingClass].size //1