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