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

如何从Java代码使用Scala变量

庾鸿飞
2023-03-14
问题内容

我正在尝试scala.Console从Java代码中使用代码,原因是java.io.Console它在Eclipse中不起作用,而Scala则可以。但我无法获得方法

def readLine (text: String, args: Any*): String

之所以能够正常工作,是因为它似乎期望scala.collection.Seq[Any]第二个参数使用a,而且我看不到如何Seq在Java中创建a
。我该如何解决?

我尝试过的事情:

1)使用null

// Java
String s = scala.Console.readLine("Enter text: ", null);

-获得奖励NullPointerException

2)替换为nullwith
scala.collection.Seq.empty(),但是javac报告各种错误,例如Seq没有empty方法。

3)Nilscala.collection.immutable包对象中使用该对象,但此处建议的语法为scala.collection.immutable.package$Nil$.MODULE$,但无法解析。

当然,我可以只使用readLine()不包含varargs 的方法,但这太容易了。


问题答案:

您可以使用:

scala.collection.Seq$.MODULE$.empty();

从Java代码创建一个空序列。否则,您可以使用:

new scala.collection.mutable.ArrayBuffer();

创建一个空数组缓冲区,然后可以在其中添加元素并将其用作Scala vararg方法的参数。

否则,如果您要使用Java代码中要使用的vararg方法设计Scala库,请使用varargs注释。它将生成方法的Java版本,该版本采用数组而不是Seq

scala> class A {
     |   @annotation.varargs def foo(x: Int*) { println(x) }
     | }
defined class A

scala> println(classOf[A].getMethods.toList)
List(public void $line1.$read$$iw$$iw$A.foo(scala.collection.Seq), public void $line1.$read$$iw$$iw$A.foo(int[]), ...)

上面的反射显示foo生成了2个版本的方法-一个采用a Seq[Int],另一个采用a int[]



 类似资料:
  • 问题内容: 假设我在scala中将类型别名定义为 看来我无法在Java代码中这样引用别名(它只是抱怨 找不到符号 ): 我也尝试过静态导入。 (更具体地说,我有无法更改的Java反射代码,需要知道参数类型,并且需要向其提供Bar别名)。 我知道,我可以在Scala中创建包装器 但也许我错过了其他方式? 问题答案: 类型别名仅对Scala编译器可见,并且与通用类型一样,它们不会出现在JVM类文件中的

  • 问题内容: 基本上,我想做两件事: 我想知道是否可以使用Java代码运行Java代码。 如果可能的话,如何在屏幕上显示输出?(无论是常规输出还是错误或异常) 我知道这是可能的,因为我的一位前辈已经做到了,但是我不知道他是如何做到的。也许他使用了Java的内置类之一。 注意:用户将代码写入一些文本文件中,然后将文件内容存储在某个变量中,然后也许运行该代码。 问题答案: 是的,有可能。 步骤1:编译代

  • 问题内容: 我不是在寻找像Web服务这样的常见答案。我正在寻找在同一台机器上运行的轻量级解决方案。 编辑:我正在寻找Java中调用.NET方法的方法 问题答案: 我相信Java可以与COM对话,.NET可以公开COM接口。因此,这可能是一种非常轻巧的解决方案,不需要任何第三方。还可以选择使用套接字在程序之间进行通信,这不需要在计算机上安装大量的IIS实例。

  • 问题内容: 如果可以的话,如何在Wicket的JavaScript代码中调用Java代码(例如方法)。 问题答案: 呃 正确的答案应该是ajax回调。您可以手动将js编码为挂钩到wicket js,也可以在java中通过wicket组件设置回调。例如,从AjaxLazyLoadPanel中: 本示例说明如何将回调代码添加到Wicket中的任何组件。在浏览器中触发OnDomReady事件后,加载页面

  • 问题内容: 在Scala邮件列表中,不同的人经常说:“编译器将此[scala]代码重写为此[java / scala ??]代码”。例如,如果最新的线程之一,Scala看到 然后编译器将其重写为(有效): 我如何找出我的代码的编译器输出是什么?我应该为此反编译生成的字节码吗? 问题答案: 您可以使用“ -print”作为编译器选项,而scalac将删除所有Scala特定的功能。 例如,这是原始代码

  • 问题内容: 我需要根据通过Java从数据库中获取的数据生成Excel工作表。为此,我需要在生成Excel时调用一些VBA宏函数。有人可以帮助我如何从Java代码调用VBA宏吗? 问题答案: 我不太了解您从数据库中的数据生成Excel工作表的总体方法。通常,我会使用Vivek提出的Apache POI。 但是,如果您确实需要在工作表中调用Excel宏,则需要做两件事: 首先,您需要一个JAVA-CO