当前位置: 首页 > 面试题库 >

如何在Java中获取类的TypeTag

龚远
2023-03-14
问题内容

我试图functions.typedLit在另一个问题中从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, ???)

问题答案:

在另一个问题中,我说

并从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]]
}

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

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



 类似资料:
  • 问题内容: 我创建了自己的注释类型,如下所示: 并将其附加到一个类上: 我试图通过反射来获得类注释,如下所示: 但它没有打印任何内容。我究竟做错了什么? 问题答案: 默认的保留策略是,默认情况下,注释信息在运行时不保留: 批注由编译器记录在类文件中,但VM在运行时无需保留。这是默认行为。 而是使用: 注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以通过反射方式读取它们。 …您使用met

  • 问题内容: 我有一个保存某种类型的变量,我需要获取一个保存相应数组类的变量。我能想到的最好的办法是: 有没有一种方法可以在不创建新实例的情况下进行操作? 问题答案: 从Java 12开始,在java.lang.Class上提供了方法。接着就,随即:

  • 问题内容: 我想获取方法的调用者类,即 在方法栏中,我需要获取类名称,然后找到了该方法: 但是,即使是,当我尝试调用它时,Eclipse 也会说: 访问限制:由于必需的库C:\ Program Files \ Java \ jre7 \ lib \ rt.jar的限制,无法访问类型为Reflection的方法getCallerClass() 还有其他选择吗? 问题答案: 你可以生成堆栈跟踪并使用S

  • 问题内容: 我在网上看到的解决方案很有意义;如果知道变量的类型,那么就知道其值的类型。Java就是这样。但是,如果我有这样的继承类系统… 并以这种方式创建对象… 有没有一种方法可以获取FirstPQ 的 类型 ,以便可以在强制转换中使用它,以便可以访问类的独占方法?也许与此类似? 问题答案: 您有几种选择。 您可以使用反射 你可以用 您可以使用访客模式 对于这些示例,我们将尝试查找此变量的类型:

  • 问题内容: 不使用任何外部库,将网站的HTML内容提取为String的最简单方法是什么? 问题答案: 我目前正在使用此: 但不确定是否有更好的方法。

  • 我想得到由接口实现的子类名。例如 在我的代码中,我声明了接口A,并将值设置为其中一个类。所以我有这样的: 现在我想得到当前的子类名称,比如B、C或其他什么,但我不想用instanceof,因为我有很多子类,这使得代码不必要太长。我基本上是在寻找这个,但是getChild()当然不存在。 提前谢谢!