So habe ich eine Scala-Klasse, die wie folgt aussieht:Gibt es eine Möglichkeit, auf den Typ einer Scala Option Deklaration zur Laufzeit mit Reflektion zuzugreifen?
class TestClass {
var value: Option[Int] = None
}
und ich bin der Bekämpfung ein Problem, wo ich einen String-Wert haben, und ich will es in diese Option [Int] zur Laufzeit zwingen, mithilfe von Reflektion . Also, in einem anderen Teil des Codes (das weiß nichts von Testclass) ich so einen Code haben:
def setField[A <: Object](target: A, fieldName: String, value: String) {
val field = target.getClass.getDeclaredField(fieldName)
val coercedValue = ???; // How do I figure out that this needs to be Option[Int] ?
field.set(target, coercedValue)
}
Um dies zu tun, ich muss wissen, dass das Feld eine Option ist und dass der Typ-Parameter der Option ist Int.
Welche Optionen habe ich, um herauszufinden, dass der Typ von 'Wert' zur Laufzeit Option (Int) ist (d. H. Mit Reflektion)?
Ich habe ähnliche Probleme durch Annotation des Feldes, z. @OptionType (Int.Klasse). Ich würde eine Lösung bevorzugen, die nach Möglichkeit keine Anmerkungen zum Reflexionsziel erfordert.
Ich habe nicht das Bedürfnis nach Reflexion sehen. Jeder Wert, dessen statischer Typ "Option [Int]" ist, ist entweder 'None' oder' Some [Int] '. –
Hallo Randall. Ich muss Reflektion verwenden, da die Klasse, die die Felder manipuliert, wie TestClass.value, keinen kompilierzeitlichen Zugriff auf die Klassen hat, die es bearbeitet. Ich habe meiner Frage ein Beispiel hinzugefügt, das zeigt, wie die Zielobjekte manipuliert werden, und den Punkt hervorgehoben, an dem ich die Antwort auf diese Frage benötige. –