Dato è un metodo Java che restituisce java.lang.Object
s per una determinata stringa. Mi piacerebbe racchiudere questo metodo in un metodo Scala che converte le istanze restituite in un tipo T
. Se la conversione fallisce, il metodo dovrebbe restituire None
. Sto cercando qualcosa di simile a questo:Tipo di trasmissione utilizzando il parametro tipo
def convert[T](key: String): Option[T] = {
val obj = someJavaMethod(key)
// return Some(obj) if obj is of type T, otherwise None
}
convert[Int]("keyToSomeInt") // yields Some(1)
convert[String]("keyToSomeInt") // yields None
(Come) Questo può essere raggiunto utilizzando l'API di riflessione di Scala? Sono ben consapevole che la firma di convert
potrebbe dover essere modificata.
Grazie mille per questo. Ho creato il mio 'safeCast [T: ClassTag]' su una conversione implicita da Option [Any] ma ho notato che le primitive restituivano sempre None. Usando Typeable ho cambiato il corpo in un semplice 'opt.flatMap (_. Cast [T])' e funziona alla grande. – ShawnFumo