Scala 如何从类名中获取伴生对象?

Scala 如何从类名中获取伴生对象?,scala,Scala,我有一些spark模型文件,我想加载它们。一种方法是编写以下代码 LogisticRegressionModel.load(path) 但是,我需要一个模型对象,以便调用LogisticRegressionModel.load。我只得到org.apache.spark.ml.classification.LogisticRegressionModel这样的类名,所以我需要从类名中反映伴生对象,但我如何才能做到这一点 ,我发现有一条可能是断裂的路。但当我尝试时,在classMirror中找不到伴

我有一些spark模型文件,我想加载它们。一种方法是编写以下代码

LogisticRegressionModel.load(path)
但是,我需要一个模型对象,以便调用LogisticRegressionModel.load。我只得到org.apache.spark.ml.classification.LogisticRegressionModel这样的类名,所以我需要从类名中反映伴生对象,但我如何才能做到这一点


,我发现有一条可能是断裂的路。但当我尝试时,在classMirror中找不到伴生字段。

如果您知道编译时的类型,您可以尝试使用在2020年运行的稍新API:

import scala.reflect.runtime.universe._

def findCompanionOf[T: TypeTag] =
  runtimeMirror(getClass.getClassLoader)
    .reflectModule(typeOf[T].typeSymbol.companionSymbol.asModule)
    .instance
如果您只知道名称作为字符串或类[\u]。。。如果存在伴生项,则为.class name+$,而实例应在静态字段模块$中可用

在这两种情况下,如果类/类型没有伴奏,则使用throw编码,尽管第二个版本也不能使用Long、Int等原语

在您的情况下,类似于:

findCompanionOf(
  getClass.getClassLoader.loadClass("org.apache.spark.ml.classification.LogisticRegressionModel")
)

可能有用。

如果您在编译时知道某个类型,您可以尝试使用在2020年工作的稍新API:

import scala.reflect.runtime.universe._

def findCompanionOf[T: TypeTag] =
  runtimeMirror(getClass.getClassLoader)
    .reflectModule(typeOf[T].typeSymbol.companionSymbol.asModule)
    .instance
如果您只知道名称作为字符串或类[\u]。。。如果存在伴生项,则为.class name+$,而实例应在静态字段模块$中可用

在这两种情况下,如果类/类型没有伴奏,则使用throw编码,尽管第二个版本也不能使用Long、Int等原语

在您的情况下,类似于:

findCompanionOf(
  getClass.getClassLoader.loadClass("org.apache.spark.ml.classification.LogisticRegressionModel")
)
可能有用

findCompanionOf(
  getClass.getClassLoader.loadClass("org.apache.spark.ml.classification.LogisticRegressionModel")
)