gpt4 book ai didi

java - 如何在java中获取scala的TypeTag和ClassTag

转载 作者:行者123 更新时间:2023-12-05 06:42:01 26 4
gpt4 key购买 nike

我正在编写 Java 代码,我需要在其中调用定义如下的 Scala 函数:

def func[T: TypeTag: ClassTag ](name: String): RDD[T] = ...

在 Scala 中,我会简单地调用 func StringJava 代码应该类似于: func( "a", arg1 , arg2 )其中 arg1 是 TypeTag< T >,arg2 是 ClassTag< T >

我不确定如何在 java 中生成 arg1 和 arg2

最佳答案

你想为通用 T 做吗?还是针对特定的?对于generic,没办法,接受ClassTag<T>TypeTag<T>作为参数(就像 Scala 代码实际做的那样)。具体来说,我建议在 Scala 中编写一个包装器,例如def func_String(name: String) = func[String](name)并从 Java 调用它。

或更笼统,但复杂得令人讨厌:

import scala.reflect.ClassTag
import scala.reflect.runtime.universe._

def func1[T](name: String, clazz: Class[T]) = {
val classTag = ClassTag[T](clazz)

val m = runtimeMirror(clazz.getClassLoader)
val tpe = m.classSymbol(clazz).toType
val typeCreator = new scala.reflect.api.TypeCreator {
def apply[U <: Universe with Singleton](m1: scala.reflect.api.Mirror[U]): U # Type =
if (m1 != m) throw new RuntimeException("wrong mirror") else tpe.asInstanceOf[U#Type]
}
val typeTag = TypeTag[T](m, typeCreator)

func(name)(typeTag, classTag)
}

(您也可以用 Java 编写等价物。)

关于java - 如何在java中获取scala的TypeTag和ClassTag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38589179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com