请参阅Scala反射中的注释

我正在尝试在Scala反射中看到一个注释,至今没有骰子。 我错过了什么?

我的注释:(Java)

@Target({ElementType.PARAMETER})  // Also tried ElementType.CONSTRUCTOR
@Retention(RetentionPolicy.RUNTIME)
public @interface MongoKey {
    String info = "";
}

以及尝试使用Scala反射访问它的部分:

case class One( 
@MongoKey name  : String, 
    stuff : List[String]
)

val targetObj = One("FOO", List("a","b"))
val targetType = typeOf[One]

// Given an object (case class) the Type of the case class, and a field name,
// retrieve the typed field object from the case class.
def unpack[T](target: T, t: Type, name: String): (Any, Type) = {
   val im = cm.reflect(target)(ClassTag(target.getClass))
   val fieldX = t.declaration(newTermName(name)).asTerm.accessed.asTerm
   val fm = im.reflectField(fieldX)
   (fm.get, fm.symbol.typeSignature)  // return the field's value + Type
}

val (pval,pvalType) = SeeMe.unpack(targetObj, targetType, "name")
println(" -> "+pvalType.typeSymbol.annotations)

输出是我的case class'字段的成功遍历,但注释List始终是空的,即使我用@MongoKey注解修饰类的字段。 我看错了地方?


这很棘手! 注释不在类的成员上,而是实际上在伴随对象的apply方法中的参数上!

从你的类型,你应该能够得到伴侣对象:

val companion = myType.typeSymbol.companionSymbol

从那里你可以使用反射来查看apply方法的参数。

链接地址: http://www.djcxy.com/p/71869.html

上一篇: See annotations in Scala reflection

下一篇: VS8 can't handle file.close(); file.open();, why?