Scala注释继承



在Scala中,我有一个注释和一个带有注释的基本trait,但扩展该类并没有继承注释:

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

是否有办法让子类继承父类的注释?

据我所知这是不可能的。文档中对注解范围的唯一描述是:

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

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

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

虽然扩展trait不会继承注解,但扩展抽象类确实会导致注解被继承。

相关内容

  • 没有找到相关文章

最新更新