Scala:调用mutable.ArrayBuffer(List,Int)

时间:2017-06-05 03:00:14

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

但是method4会出现一些错误:

  

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

     

阶> val method4 = getTest.getClass.getMethod(“test”,argtypes4:_ *)   java.lang.NoSuchMethodException:$ iwC $$ iwC $ TagCalculation.test([I,   java.lang.Integer)在java.lang.Class.getMethod(Class.java:1678)at at   $ IWC万国表$$ $$ IWC万国表$$ $$ IWC万国表$$ $$ IWC万国表$$ $$ IWC万国表$$ $$ IWC万国表$$(35)     在   $ IWC万国表$$ $$ IWC万国表$$ $$ IWC万国表$$ $$ IWC万国表$$ $$ IWC万国表$$ $$ IWC。(40)     在   $ $$ IWC IWC $$ IWC $$ IWC $$ IWC $$ IWC $$ IWC $$ IWC $$ IWC $$ IWC。(42)

有什么想法解决这个问题?

2 个答案:

答案 0 :(得分:2)

Array是一个与::类型不同的类型。这种改变应该有效

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

答案 1 :(得分:0)

您正在传递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"

也应该工作