如何在 Java 中获取类的 TypeTag

Meh*_*ran 6 java scala apache-spark

我正在尝试functions.typedLit我的其他问题中调用from Spark 库。并且,它要求两个参数,一个文字对象,它的类型(A TypeTag)。

第一个论点,我可以自己想出来(我认为)。但是对于第二个,我不知道如何为它实例化一个对象。我正在尝试将 传递TypeTag<Seq<Integer>>为第二个参数。

有人可以告诉如何在Java 中创建TypeTagfor吗?这是我试图完成的代码:Seq<Integer>

Seq<Integer> seq =  JavaConverters
                      .asScalaIteratorConverter((new ArrayList<Integer>()).iterator())
                      .asScala()
                      .toSeq();
Column litColumn = functions.<Seq<Integer>>typedLit(seq, ???)
Run Code Online (Sandbox Code Playgroud)

Ale*_*nov 5

在你的另一个问题中我说过

从 Java 提供 CanBuildFrom 参数在技术上是可行的,但不是您想要做的事情。

不幸的是,因为TypeTag它的可能性更小:与 不同的是CanBuildFrom,它们不是由库提供的,而是内置于 Scala 编译器中。

我能给出的最好建议是创建一个 Scala 文件,提供您需要从 Java 使用的类型标签,因为您只需要有限数量的类型标签:

object TypeTags {
  val SeqInteger = typeTag[Seq[Integer]]
  ...
  // or 
  val Integer = typeTag[Integer]
  def Seq[A](implicit tt: TypeTag[A]) = typeTag[Seq[A]]
}
Run Code Online (Sandbox Code Playgroud)

然后从 JavaTypeTags.SeqIntegerTypeTags.Seq(TypeTags.Integer).

在其他地方,Spark 提供了供 Java 使用的特殊 API(查找.java包),但我找不到适用于functions.typedLit.