我上课
class LrGen extends IModelGen {
var header = Array(
"First name",
"last name",
"address",
"city",
"state",
"zip"
)
override def getHeader(separator:String): String =
{
header.mkString(separator)
}
}
我试图通过以下反射来调用该类的getHeader方法:How to invoke method on companion object via reflection?,但由于我的类名也会有所不同,因此进行了一些修改。我的代码如下:
val clazzToInvoke = classInitialName+ "Gen"+"$"
import scala.reflect.runtime.universe._
// get runtime universe
val ru = scala.reflect.runtime.universe
// get runtime mirror
val rm = ru.runtimeMirror(this.getClass.getClassLoader)
// get instance mirror for companion object for the class
val moduleSymbol = rm.reflect(Class.forName(clazzToInvoke))
val methodGetHeader = ru.typeOf[clazzToInvoke.type].decl(ru.TermName("getHeader")).asMethod
println(methodGetHeader("\t"))
但是,我遇到了错误:
error: ru.MethodSymbol does not take parameters
[ERROR] println(methodGetHeader("\t")
有见识吗?预先感谢。
供参考我的界面如下:
trait IModelGen
{
def getHeader(separator:String): String
}
答案 0 :(得分:0)
对于您的示例,您不见了:
val methodHi = instanceMirror.reflectMethod(methodGetHeader)
methodGetHeader()
和供您参考的链接:它用于调用 object / singleton 方法,但对于LrGen
而言,它不是一个 singleton对象的类。
所以也许您需要实例化一个类并调用 getHeader
方法,例如:
val lr = classOf[LrGen].getConstructors()(0).newInstance().asInstanceOf[LrGen]
lr.getHeaders("\t")