gpt4 book ai didi

scala - 查看 Scala 反射中的注释

转载 作者:行者123 更新时间:2023-12-04 08:26:28 25 4
gpt4 key购买 nike

我试图在 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)

输出是对我的案例类字段的成功遍历,但注释列表始终为空,即使我使用 @MongoKey 注释装饰类的字段也是如此。我找错地方了吗?

最佳答案

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

根据您的类型,您应该能够通过以下方式获取伴随对象:

val companion = myType.typeSymbol.companionSymbol

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

关于scala - 查看 Scala 反射中的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17051455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com