MrE*_*yme 9 reflection inheritance annotations scala
在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
Run Code Online (Sandbox Code Playgroud)
有没有办法让子类继承父级的注释?
据我所知这是不可能的。文档中对注释范围的唯一描述如下:
注释子句适用于其后的第一个定义或声明。定义和声明之前可以有多个注释子句。这些子句的给出顺序并不重要。
这可能意味着注释仅适用于其后的第一个定义。当然,您可以创建一个辅助方法来检查基类的定义:
def baseAnnotations[T : TypeTag] = typeOf[T].typeSymbol.asClass.baseClasses.flatMap(_.annotations)
baseAnnotations[InheritingClass].size //1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
747 次 |
| 最近记录: |