从对象动态调用scala方法

从对象动态调用scala方法,scala,reflection,scala-reflect,Scala,Reflection,Scala Reflect,我有一个scala case类和对象,如下所示 case class User(userId: Long, UserName: String, ts: Timestamp) object User { def getRdd(rdd: RDD[JsValue], type : String): RDD[User] = { val rdd1: RDD[User] = rdd.map(doc => processEvent(doc)) .filter(event =

我有一个scala case类和对象,如下所示

case class User(userId: Long, UserName: String, ts: Timestamp)

object User {

  def getRdd(rdd: RDD[JsValue], type : String): RDD[User] = {

    val rdd1: RDD[User] = rdd.map(doc => processEvent(doc))
      .filter(event => event._1.equals(rddType)).map(event => {
      User.get_class_obj(event)
    })
    rdd1
  } 

}
val object_name = "com.User"
val method_name = "getRdd"
我想从另一个对象调用用户对象的“getRdd”方法,而不创建对象/类的实例。如下图所示

case class User(userId: Long, UserName: String, ts: Timestamp)

object User {

  def getRdd(rdd: RDD[JsValue], type : String): RDD[User] = {

    val rdd1: RDD[User] = rdd.map(doc => processEvent(doc))
      .filter(event => event._1.equals(rddType)).map(event => {
      User.get_class_obj(event)
    })
    rdd1
  } 

}
val object_name = "com.User"
val method_name = "getRdd"
我试过了

val no = Array(1, 2, 3, 4, 5,6,7,8,9,10)
val rdd = sc.parallelize(no)


Class.forName(object_name).getDeclaredMethod(method_name).invoke(rdd)
但是失败了,没有任何方法错误。我已经看过了答案,但我不想每次都创建多个实例。可以一行完成吗。

试试美元符号

val object_name = "com.User$"
如果对象
User
在包
com

从Java反射的角度来看,
User
是一个类,
User$
是它的伴生对象

您还应该指定参数类

Class.forName("com.User$").getDeclaredMethod("getRdd", classOf[RDD[_]], classOf[String])

你能描述一下你的用例吗?在Scala中,反射很少是解决问题的最佳方法。我尝试运行Class.forName(object_name+“$”).getDeclaredMethod(method_name).invoke(rdd),但仍然相同。找不到这样的方法。你们能分享代码片段吗?这将有助于理解。@NachiketKate您还应该指定参数类型
Class.forName(“com.User$”).getDeclaredMethod(“getRdd”,classOf[RDD[JsValue]],classOf[String])