2017-06-02 72 views
0

我傻使用Scala :(我已经得到了一些帮助有关调用和Scala类型,但新的再次出现。斯卡拉:调用类型不匹配时的乐趣mutable.ArrayBuffer

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

val getTest = new TagCalculation 
val arg1: java.lang.Integer = 10 
val arg2: String = "foobar" 
val arg3: scala.collection.immutable.$colon$colon[Any] = scala.collection.immutable.$colon$colon.apply('z', List("foo", 10)) 

//val test = Array(arg1,arg2,arg3) It's Ok if i use that. 
var calcParamsArray : scala.collection.mutable.ArrayBuffer[Any] = scala.collection.mutable.ArrayBuffer() 

calcParamsArray += arg1 
calcParamsArray += arg2 
calcParamsArray += arg3 

val argtypes4 = calcParamsArray.map(_.getClass) 
val method4 = getTest.getClass.getMethod("test", argtypes4: _*) 
method4.invoke(getTest,calcParamsArray: _*) //also errors in toArray and toSqe 

输出:

scala> method4.invoke(getTest,calcParamsArray: _) :29: error: type mismatch; found : scala.collection.mutable.ArrayBuffer[Any] required: Seq[Object] method4.invoke(getTest,calcParamsArray: _)

任何想法来解决这个问题?

回答

2

错误消息明确表示

found : scala.collection.mutable.ArrayBuffer[Any] 
required: Seq[Object] 

你传入ArrayBuffer[Any],但需要的是Seq[Object]

更改代码的最后一行

method4.invoke(getTest,calcParamsArray.asInstanceOf[Seq[Object]]: _*) 

它应该工作

+0

是的,现在的工作:) – meng