Quindi, ho una classe Scala che assomiglia a questo:Un modo per accedere al tipo di una dichiarazione di Scala Opzione in fase di runtime utilizzando la riflessione?
class TestClass {
var value: Option[Int] = None
}
e sto affrontando un problema in cui ho un valore String e voglio costringere in che l'opzione [Int] in fase di esecuzione utilizzando la riflessione . Così, in un altro pezzo di codice (che non sa nulla TestClass) ho qualche codice come questo:
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)
}
Per fare questo, ho bisogno di sapere che il campo è una possibilità e che il parametro tipo di opzione è Int.
Quali sono le mie opzioni per capire che il tipo di 'valore' è Opzione [Int] in fase di esecuzione (ad esempio utilizzando la riflessione)?
Ho visto problemi simili risolti annotando il campo, ad es. @OptionType (Int.class). Preferirei una soluzione che non richiedesse annotazioni sul target di riflessione, se possibile.
non vedo la necessità di una riflessione. Qualsiasi valore il cui tipo statico è 'Option [Int]' può essere 'None' o 'Some [Int]'. –
Ciao Randall. Ho bisogno di usare reflection perché la classe che sta manipolando i campi, come TestClass.value, non ha accesso in fase di compilazione alle classi che sta manipolando. Ho aggiunto un esempio alla mia domanda che mostra come vengono manipolati gli oggetti target e viene evidenziato il punto in cui ho bisogno di rispondere a questa domanda. –