में एनोटेशन देखें, मैं स्कैला प्रतिबिंब में एक टिप्पणी देखने की कोशिश कर रहा हूं और अब तक कोई पासा नहीं है। मैं क्या खो रहा हूँ?स्कैला प्रतिबिंब
मेरे एनोटेशन: (जावा)
@Target({ElementType.PARAMETER}) // Also tried ElementType.CONSTRUCTOR
@Retention(RetentionPolicy.RUNTIME)
public @interface MongoKey {
String info = "";
}
और भाग स्काला प्रतिबिंब का उपयोग कर इसे उपयोग करने की कोशिश करता है:
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 एनोटेशन के साथ सजाने के लिए तैयार करता हूं। क्या मेरी तलाश गलत स्थान पर हो रही है?
वैल लागूएनो = symbol.companionSymbol.typeSignature.members.collectFirst { केस विधि: विधि सिंबल अगर (method.name.toString == "लागू करें") => method.paramss.head.collect {case p if (p। annotations.find (a => a.tpe == SeeMe.hintType) .isDefined) => p.name.toString} } .get – Greg
अच्छा! आपको अपने अंतिम समाधान के साथ वापस पोस्ट करने के लिए मेरा उपरोक्त मिलता है। – Andy