Scala yansımasında bir açıklama görmeye çalışıyorum ve şu ana kadar hiç bir zar yok. Neyi kaçırıyorum?Scala yansımasındaki ek açıklamalara bakın.
Benim Ek Açıklama: (Java)
@Target({ElementType.PARAMETER}) // Also tried ElementType.CONSTRUCTOR
@Retention(RetentionPolicy.RUNTIME)
public @interface MongoKey {
String info = "";
}
Ve Scala yansıma kullanarak erişmeye kısmı:
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)
çıktı dosyamın sınıfı alanına ancak başarılı bir geçişi olan Açıklama Not @MongoKey ek açıklama ile sınıfın bir alanını dekore etsem bile liste her zaman boştur. Yanlış yere mi bakıyordum?
val applyAnno = symbol.companionSymbol.typeSignature.members.collectFirst { durum yöntemi: MethodSymbol if (method.name.toString == "apply") => method.paramss.head.collect {case p if (p. annotations.find (a => a.tpe == SeeMe.hintType) .isDefined) => p.name.toString} } .get – Greg
Güzel! Son çözümünle geri göndermek için elimden geleni yapıyorsun. – Andy