在下面的代碼中,我嘗試調用具有Int參數的對象的方法(將其值設爲3)。這返回一個錯誤,Int
和3
是不兼容的類型。使用Int參數的斯卡拉反射
//Using scala's Int does not work!
object MyObject{
def handleInt(id:Int) : Boolean = {
true
}
}
object testApp extends App {
val obj = MyObject.getClass
val method = obj.getDeclaredMethod("handleInt", classOf[Int]) //Int.getClass shows the same behavior
val rsp = method.invoke(obj, 3)
}
Error:(106, 41) the result type of an implicit conversion must be more specific than AnyRef
val rsp = method.invoke(obj, 3)
Error:(106, 41) type mismatch; found : Int(3) required: Object
val rsp = method.invoke(obj, 3)
我想在這裏改變了很多東西,只是這可能是工作的方式是改變所有簽名Java的Integer
。該代碼將是這樣的:
//This works with Java's Integer
object MyObject{
def handleInt(id:Integer) : Boolean = {
true
}
}
object testApp extends App {
val obj = MyObject.getClass
val method = obj.getDeclaredMethod("handleInt", classOf[Integer])
val rsp = method.invoke(obj, 3)
}
我的問題(S)是:
- 有人可以解釋爲什麼出現這種情況?我認爲斯卡拉的
Int
包裝Java的原始int
(這就是爲什麼這不被認爲是對象),但我不知道。 - 有沒有一種方法可以使用Scala的
Int
類型實現這個功能? - 像這樣混合scala和java類型是可以接受的嗎?這是一個好習慣嗎?