J'ai une méthode à laquelle je passe un objet. Dans cette méthode je vérifie son type et en fonction du type je fais quelque chose avec lui et retourne un long. J'ai essayé de toutes les manières possibles de faire cela et j'ai toujours plusieurs erreurs de compilateur me disant qu'il attend un certain objet mais en obtient un autre. Quelqu'un peut-il m'expliquer ce que je fais de mal et me guider dans la bonne direction? Ce que j'ai essayé jusqu'ici est ci-dessous:Comment puis-je vérifier un objet pour voir son type et retourner un objet moulé
override def getInteger(obj:Object) = {
if (obj.isInstanceOf[Object]) null
else if (obj.isInstanceOf[Number])
(obj:Number).longValue()
else if (obj.isInstanceOf[Boolean])
if (obj:Boolean) 1 else 0
else if (obj.isInstanceOf[String])
if ((obj:String).length == 0 | (obj:String) == "null")
null
else
try {
Long.parse(obj:String)
} catch {
case e: Exception => throw new ValueConverterException("value \"" + obj.toString() + "\" of type " + obj.getClass().getName() + " is not convertible to Long")
}
}
cela a fonctionné parfaitement, à l'exception que dans le cas booléen, j'ai eu une erreur de compilateur en disant qu'une longue était attendue. Je m'en suis occupé en le modifiant en 'if (b) 1.longValue else 0.longValue' –
C'est un peu fou, il n'y a pas d'implicite de int à long. C'est TOUJOURS sûr de le faire. – davetron5000
@Russ: Ou vous pourriez écrire 'if (b) 1L else 0L'. – missingfaktor