【发布时间】:2018-10-29 11:27:58
【问题描述】:
我正在尝试使用变量作为字符串类型动态调用函数,即变量将包含函数名称作为字符串。所以,我需要使用该变量调用一个函数。
所以,我正在使用 Scala 反射。如果函数接受数据类型为 Sting,它就可以工作,但它会抛出错误 List[Map[String, Double]]
我使用下面的链接来引用代码
Is there any Scala feature that allows you to call a method whose name is stored in a string?
以下是我正在尝试测试的测试程序
package test
import scala.collection.immutable.Map
class DynamicaVariable {
def cat(s1: List[Map[String, Double]]) = {
println(s1)
}
}
object DynamicaVariable{
def main(args: Array[String]): Unit = {
val obj = new DynamicaVariable
val data = List(
Map("a" -> 1.0, "b" -> 267.0, "c" -> 26.0, "d" -> 2.0), Map("a" -> 1.0, "b" -> 2678.0, "c" -> 40.0, "d" -> 2.0), Map("a" -> 4.0, "b" -> 267.0, "c" -> 26.0, "d" -> 2.0), Map("a" -> 1.0, "b" -> 2678.0, "c" -> 90.0, "d" -> 17.0)
)
val functionName = "cat"
val method = obj.getClass.getMethod(functionName,data.getClass)
method.invoke(obj,data)
}
}
我的 scala 版本是 2.11.6,我正在使用 IntelliJ。我也检查了 SDK 版本。并取消选中scala下的“在编译过程中运行工作表”
但还是没有运气!任何想法都会有所帮助。谢谢!
【问题讨论】:
-
不确定是否有帮助,但以这种方式调用 getMethod
val method = obj.getClass.getMethod(functionName, classOf[List[Map[String, Double]]])对我有用
标签: java scala intellij-idea sbt scala-reflect