Scala注释继承

时间:2014-07-05 16:45:01

标签: scala inheritance reflection annotations

在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 个答案:

答案 0 :(得分:3)

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

  

annotation子句适用于其后的第一个定义或声明。在定义和声明之前可以有多个注释子句。这些条款的顺序无关紧要。

这可能意味着注释仅将 应用于其后的第一个定义。当然,您可以创建一个帮助方法来检查基类的定义:

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

答案 1 :(得分:0)

虽然扩展特征不继承注释,但是扩展抽象类确实会导致注释被继承。