В приведенном ниже коде я пытаюсь вызвать метод объекта, который имеет параметр Int (дающий ему значение 3). Это возвращает ошибку, которую Int
и 3
являются несовместимыми типами.Scala reflection с параметром 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)
}
Мой вопрос (ы):
- Может кто-нибудь объяснить, почему это происходит? I думаю scala's
Int
обертывает примитив javaint
(вот почему это не считается объектом ), но я не уверен. - Есть ли способ достичь этого, используя Scala's
Int
? - Допустимо ли смешивать типы scala и java, как это? Это хорошая практика?