来自 StackOverflow 的 Scala 专家。
在下面的示例代码中,我重现了我正在处理的项目中面临的行为。我应该能够推断/测量在类字段成员中存在时定义的注释“武器”泛型类型。
import scala.reflect.runtime.universe._
import scala.annotation.StaticAnnotation
class Reflection
object Reflection {
def reflect[T: TypeTag](x: Class[T]): Type = {
typeOf[T]
}
def main(args: Array[String]) {
var tpe = reflect(classOf[Hero])
for (member <- tpe.members)
for (annotation <- member.annotations)
annotation.tpe match {
case t if t <:< typeOf[weapon[_]]
=> println(s"found weapon member: $member")
case t if t <:< typeOf[action]
=> println(s"found action member: $member")
}
}
}
class weapon[T <: WeaponType](x: String = null) extends StaticAnnotation
class action extends StaticAnnotation
class WeaponType(damage: Int)
case class Knife extends WeaponType(12)
class Hero {
@weapon[Knife] var weapon: String = _
@action def hitWithKnife() {
}
}
然而,在我提供的示例代码中,我无法避免 REPL 将奇怪的日志打印为
[] ?_$1 setInst sample.Knife
提前致谢
编辑
'@alexwriteshere' 正确地解释了日志让我感到无聊的原因。他让我觉得我的问题很困惑。
问题
可以推断/测量在类成员的@weapon 上定义的 T 类型(如在我的 Hero 类的武器成员中所见)。