【发布时间】:2016-03-07 20:56:34
【问题描述】:
我是 scala 的新手。有我无法解决的问题。我使用java反射来检查用scala编写的方法。(我在scala中找不到正确的方法) 像这样的代码:
case class SomeClass(udf: UDF) {
// Get Method object of "eval" method in udf
val evalMethod: Method = {
var evalMethods: ListBuffer[Method] = new ListBuffer[Method]
udf.getClass.getMethods.foreach(m => {
if (m.getName().equals("eval")) {
evalMethods += m
}
})
if (evalMethods.length != 1) {
throw new Exception(s"$udf must have only one eval method")
}
evalMethods(0)
}
val evalParamsType = {
val hasVarArgs = evalMethod.isVarArgs // Not work here
println("varargs:" + hasVarArgs) // Always false
for (param <- evalMethod.getParameterTypes) {
// do some thing
}
// return some thing
}
}
trait UDF {
}
object SomeUDF extends UDF {
def eval(fields: String*) = {
// do something here
}
}
代码可能看起来很奇怪,我必须使用反射来完成这项工作,因为 UDF 中的“eval”方法可以有不同的参数和返回类型。 (这是另一个问题……)
似乎java中的Method类无法识别scala中的可变参数,有没有办法在java或scala中完成这项工作?
【问题讨论】:
-
您不需要先将 hasVarArgs 分配给 val 或 var 吗?
-
哦,你是对的,这是错误的编辑,我会修复它。问题不是这个,不过还是谢谢
-
这整件事看起来很可疑。为什么要这样做?问你这个问题。答案将是“因为我想做 bla bla bla”谷歌“如何在 scala 中解决 bla bla bla”如果你没有找到它,请在 StackOverflow 上询问。
标签: scala