2014-07-05 12 views
5

In Scala, ho un'annotazione e una caratteristica di base con l'annotazione, ma estendendo tale classe non eredita l'annotazione:Scala annotazione Ereditarietà

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 

C'è un modo per ottenere la sottoclasse di ereditare la annotazione del genitore?

risposta

2

Questo non è possibile per quanto ne so. L'unica descrizione dell'ambito delle annotazioni nel documento è la seguente:

Una clausola di annotazione si applica alla prima definizione o dichiarazione successiva. Più di una clausola di annotazione può precedere una definizione e una dichiarazione. L'ordine in cui vengono fornite queste clausole non ha importanza.

Questo probabilmente significa un'annotazione si applica solo alla prima definizione segue. Naturalmente, è possibile creare un metodo di supporto che controlli le definizioni sulle classi di base:

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