Comment puis-je Vérifier un Objet afin de déterminer son Type et de Retourner Un Objet Coulé
J'ai de la méthode à laquelle j'ai passer un objet. Dans cette méthode, j'ai vérifier c'est le type et selon le type je faire quelque chose avec elle et de retour d'un Long. J'ai essayé dans tous les sens, que je pense à le faire et j'ai toujours plusieurs erreurs du compilateur me dit qu'il s'attend à un certain objet, mais devient un autre. Quelqu'un peut-il m'expliquer ce que je fais de mal et de me guider dans la bonne direction? Ce que j'ai essayé jusqu'à présent est la suivante:
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")
}
}
OriginalL'auteur Russ Bradberry | 2010-04-17
Vous devez vous connecter pour publier un commentaire.
Pattern matching serait de le rendre beaucoup plus agréable.
if(b) 1.longValue else 0.longValue
C'est un peu fou il est pas implicite de int en long. Il est TOUJOURS plus sûr de le faire.
Ou vous pouvez écrire
if(b) 1L else 0L
.si l'un des types de
getInteger(3)
alors on obtient un objet de typeAny
, comment l'obtenir comme un entier ?OriginalL'auteur missingfaktor
Ce code crie à l'aide d'un match:
Suivi mon propre conseil de mon commentaire à ma réponse d'origine...
Ce ne sera pas le compiler en tant que Booléen n'est pas sous-classe de l'Objet.
G: ce serait non diagnostiquée à l'origine, mais se manifeste dans ce cas, un signe que l'utilisation de Scala fonctionnalités vous aident à effacer les erreurs de type.
OriginalL'auteur Randall Schulz
Cela pourrait être un début:
(Je n'ai pas quelque chose à remplacer, et a sauté le try/catch pour des raisons de concision)
OriginalL'auteur user unknown