以下のコードでは、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)
}
私の質問(複数可)は、次のとおりです。これはなぜ起こるか
- 誰かが説明できますか?私と思うスカラの
Int
は、javaのプリミティブint
(これはオブジェクトとは考えられない理由です)をラップしますが、わかりません。 - Scalaの
Int
タイプを使用してこれを実現する方法はありますか? - このようにスカラ型とJava型を混在させることはできますか?それは良い練習ですか?