我是scala的新學習者。有問題我無法解決。我使用Java反射來檢查這是用Scala編寫的方法(我沒有找到在斯卡拉有道) 代碼是這樣的:Java的Method.isVarArgs()不能在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嗎? – hasumedic
哦,你說的對,那是錯誤的編輯,我會修復它。問題不在於此,但仍然感謝 – SleePy
這整個事情看起來很可疑。爲什麼要這樣做呢?問你這個問題。如果你沒有找到答案,答案將是「因爲我想做bla bla bla」谷歌「如何解決bla bla在斯卡拉」,問StackOverflow。 –