Mam metodę, do której przekazuję obiekt. W tej metodzie sprawdzam jego typ i zależy od typu, z którym coś robię i zwracam Long. Próbowałem każdego sposobu, w jaki mogę to zrobić i zawsze otrzymuję kilka błędów kompilatora mówiących mi, że spodziewa się pewnego obiektu, ale dostaje inny. Czy ktoś może mi wyjaśnić, co robię źle i poprowadzić mnie we właściwym kierunku? Co próbowałem dotąd jest poniżej:Jak mogę sprawdzić obiekt, aby zobaczyć jego typ i powrócić odlany obiekt
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")
}
}
to działało idealnie, z wyjątkiem tego, że w przypadku boolowskim dostałem błąd kompilatora mówiąc, że oczekiwano długiego. Zajmowałem się tym, modyfikując go na 'if (b) 1.longValue else 0.longValue' –
To trochę szalone, nie ma żadnych implicit int do long. ZAWSZE jest to bezpieczne. – davetron5000
@Russ: Lub możesz napisać 'if (b) 1L else 0L'. – missingfaktor