2014-07-05 141 views
5

在Scala中,我有一个注释,并与注释基本特征,但延伸的类没有继承注解:斯卡拉注释继承

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 

有没有办法让子类继承父母的注释?

回答

2

这是不可能的,据我所知。文档中对注释范围的唯一说明如下:

注释子句适用于后面的第一个定义或声明。定义和声明可能超过一个注释条款。这些条款的顺序并不重要。

这可能意味着一个注释将仅适用于到它后面的第一个定义。当然,你可以制定一个帮助方法来检查基类的定义:

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