Scala:调用mutable.ArrayBuffer(List,Int)时出现NoSuchMethodException

Scala: NoSuchMethodException when invoking mutable.ArrayBuffer(List,Int)

我想通过反射调用(List,Int),这是我的代码:

class TagCalculation {
  def test(arg1: scala.collection.immutable.$colon$colon[Any],arg2: java.lang.Integer) = "test mix2"
}
val getTest =  new TagCalculation

val arg1 : scala.collection.mutable.ArrayBuffer[Any] = scala.collection.mutable.ArrayBuffer()
arg1 += Array(1,2,3)

arg1 += 4

val argtypes4 = arg1.map(_.getClass)
val method4 = getTest.getClass.getMethod("test", argtypes4: _*)
method4.invoke(getTest,calcParamsArray.asInstanceOf[Seq[Object]]: _*)

但是方法4会有些错误:

scala> val argtypes4 = arg1.map(.getClass) argtypes4: scala.collection.mutable.ArrayBuffer[Class[]] = ArrayBuffer(class [I, class java.lang.Integer)

scala> val method4 = getTest.getClass.getMethod("test", argtypes4: _*) java.lang.NoSuchMethodException: $iwC$$iwC$TagCalculation.test([I, java.lang.Integer) at java.lang.Class.getMethod(Class.java:1678) at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.(:35) at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.(:40) at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.(:42)

有解决此问题的想法吗?

Array 是不同于 :: 的类型,后者属于 List 类型。此更改应该有效

class TagCalculation {
  def test(arg1: scala.collection.immutable.$colon$colon[Any],arg2: java.lang.Integer) = "test mix2"
}
val getTest =  new TagCalculation

val arg1 : scala.collection.mutable.ArrayBuffer[Any] = scala.collection.mutable.ArrayBuffer()
arg1 += List(1,2,3)

arg1 += 4

val argtypes4 = arg1.map(_.getClass)
val method4 = getTest.getClass.getMethod("test", argtypes4: _*)
method4.invoke(getTest,calcParamsArray.asInstanceOf[Seq[Object]]: _*)

您正在传递 Array[Int]

arg1 += Array(1,2,3)

test 方法,但 test 方法需要 arg1: scala.collection.immutable.$colon$colon[Any]

因此将 test 函数更改为

def test(arg1: Array[Int],arg2: java.lang.Integer) = "test mix2"

应该也可以