2

Scala 编译器将元组中的装箱/拆箱作为参数表现得很奇怪。

考虑代码:

scala> class Test { def test(p: (Int, String)) = println(p) }
defined class Test

scala> classOf[Test].getMethods()(0)
res2: java.lang.reflect.Method = public void Test.test(scala.Tuple2)

scala> classOf[Test].getMethods()(0).getGenericParameterTypes
res3: Array[java.lang.reflect.Type] = Array(scala.Tuple2<java.lang.Object, java.lang.String>)

scala> // WTF??????                                      ^^^^^^^^^^^^^^^^

因此,我得到的是 Object 而不是 Integer。我认为这与 tuple parameter being 有某种关系@specialized,但无法解决如何避免/解决此问题。

它导致的问题 - 无法通过对方法签名的反射来重构方法参数(例如,在解析 json 时)。

即使有办法获得正确的类型scala-reflect也无济于事,因为周围有很多 Java 库(如 Jersey)只使用 Java 反射。

UPD:好的,将Integer(而不是Int)放入Tuple作品中。但是为什么不自动完成呢?

4

0 回答 0