Tôi có phương pháp mà tôi vượt qua một đối tượng. Trong phương pháp này, tôi kiểm tra loại của nó và tùy thuộc vào loại tôi làm điều gì đó với nó và trả về một Long. Tôi đã thử tất cả những cách mà tôi có thể nghĩ đến để làm điều này và tôi luôn luôn nhận được một số lỗi trình biên dịch nói với tôi nó hy vọng một đối tượng nhất định nhưng được khác. Ai đó có thể giải thích cho tôi những gì tôi đang làm sai và hướng dẫn tôi đi đúng hướng không? Những gì tôi đã cố gắng cho đến nay là dưới đây:Làm thế nào tôi có thể kiểm tra một đối tượng để xem loại của nó và trả lại một đối tượng đúc
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")
}
}
điều này làm việc ra hoàn hảo, với ngoại lệ là trong trường hợp boolean, tôi đã nhận được một lỗi trình biên dịch nói rằng một thời gian dài đã được mong đợi. Tôi đã chăm sóc điều này bằng cách sửa đổi nó thành 'if (b) 1.longValue else 0.longValue' –
Đó là kinda điên không có tiềm ẩn từ int đến lâu. Luôn luôn an toàn để làm điều đó. – davetron5000
@Russ: Hoặc bạn có thể viết 'if (b) 1L else 0L'. – missingfaktor