Ich habe eine Methode, an die ich ein Objekt übergebe. Bei dieser Methode überprüfe ich den Typ und je nach Typ mache ich etwas damit und gebe ein Long zurück. Ich habe alles versucht, was mir dazu einfällt, und ich bekomme immer mehrere Compilerfehler, die mir sagen, dass es ein bestimmtes Objekt erwartet, aber ein anderes bekommt. Kann mir bitte jemand erklären, was ich falsch mache und mich in die richtige Richtung lenken? Was ich habe, ist unten so weit versucht:Wie kann ich überprüfen, ob ein Objekt seinen Typ sieht und ein gegossenes Objekt zurückgibt
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")
}
}
Dies funktionierte perfekt, mit der Ausnahme, dass ich im Booleschen Fall einen Compilerfehler bekam, der sagte, dass ein Long erwartet wurde. Ich habe mich darum gekümmert, indem ich es zu 'if (b) 1.longValue else 0.longValue' geändert habe. –
Es ist irgendwie verrückt, es gibt keine implizite von int zu lang. Es ist IMMER sicher, das zu tun. – davetron5000
@Russ: Oder du könntest 'if (b) 1L else 0L' schreiben. – missingfaktor