我想通过反映来调用(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)
有什么想法解决这个问题?
答案 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"
也应该工作