2014-07-05 139 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