Scala:NoSuchMethodException调用mutable.ArrayBuffer(;列表,;Int)

Scala:NoSuchMethodException调用mutable.ArrayBuffer(;列表,;Int),scala,scala-collections,Scala,Scala Collections,我想通过反射调用(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.c

我想通过反射调用(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, 类java.lang.Integer)

scala>val method4=getTest.getClass.getMethod(“测试”,argtypes4:*) java.lang.NoSuchMethodException:$iwC$$iwC$TagCalculation.test([I, java.lang.Integer)在java.lang.Class.getMethod(Class.java:1678)在 $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC。(:35) 在 $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC。(:40) 在 $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC。(:42)


有什么办法解决这个问题吗?

数组的类型与列表类型的::不同。此更改应该有效

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]]: _*)

数组的类型与列表类型的::不同。此更改应该有效

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]]: _*)

您正在传递一个
数组[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"

应该也可以

您正在传递一个
数组[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"

应该也行

谢谢你的快速回复。谢谢你的快速回复。很高兴听到:)很高兴听到:)