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

从Scala调用Java vararg方法时:: *会做什么?

桂志诚
2023-03-14
问题内容

我正在使用REPL用Scala数组调用Java vararg方法。

如果执行此操作,则会出现错误:

case class Person(name: String, age: Int)
val array = Array(classOf[String], classOf[Int])
Person.getClass.getMethod("apply", array)

但是,如果我这样做,那就行得通:

Person.getClass.getMethod("apply", array:_*)

我的问题是怎么:_*办?Scala API在哪里定义?


问题答案:

添加:_*告诉编译器将数组视为varargs。Scala与Java的工作原理相同。如果我有方法

def foo(args: Int*) = args.map{_ + 1}

我可以这样称呼它:

foo(1, 2, 3, 4) //returns ArrayBuffer(2, 3, 4, 5)

但是,如果我想向其传递实际的序列(与一样getMethod),我会这样做:

val mylist = List(1, 2, 3, 4)
foo(mylist:_*)


 类似资料:
  • 问题内容: 我阅读的所有资料都提到了几个案例,并以“其他一些案例”作了总结。在视图/活动中调用onSaveInstanceState方法时,所有情况是什么? 问题答案: 该文档称 在活动被杀死之前将调用此方法,以便将来在将来返回某个时间时可以恢复其状态。

  • 我用java编写Rational类来做基本的数学运算,我想覆盖Number类和Comparable接口的方法。我这样做是为了双倍的价值 正如我们所知,BigInteger类也扩展了数字类,所以我对在doubleValue中调用哪个方法感到困惑,因为我已经覆盖了doubleValue

  • 问题内容: 调用声明为的Java方法时,JVM运行时必须执行哪些常规步骤? HotSpot 1.8.0 JVM如何实现JNI函数调用?涉及哪些检查步骤(例如,返回后未处理的异常?),JVM要执行哪些簿记操作(例如,本地引用注册表?),并且在调用本机Java方法之后控件将移至何处?如果有人可以提供本机HotSpot 1.8.0代码的入口点或重要方法,我也将不胜感激。 免责声明:我知道我自己可以阅读代

  • 问题内容: 我遇到了使用方法的一段代码。不知道这叫什么,我很难找到它。 这是我尝试了解的内容: 结果: 但是,我认为这是在运行时发生的,它会告诉编译器确实是一个字符串,并且可以用来告诉编译器变量是某种类型的。我的理解正确吗? 游乐场 问题答案: 被称为 类型断言 。如 有效围棋中所述 : 类型断言采用接口值并从中提取指定的显式类型的值。 因此,是的,您从类型断言中获得的值不是接口值,而是显式类型。

  • 问题内容: 当我的Android设备中的电池 模具 什么活动和片段类(如果有的话),方法是在设备的“断电”阶段叫什么名字? 另外,如果用户当前正在查看我的应用程序中的屏幕,并且按住电源按钮并选择关闭,则电池耗尽并自动关闭时,被叫/不叫事件是否与之重合? 暂停吗? OnStop? OnDestroy? OnDetach? 奖励:我是否有足够的时间将少量数据保存到Web服务器? 为了澄清设备电池“完全

  • 问题内容: 我试图将一些Scala代码注入到现有的Java应用程序中。(所以,话说回来,我想要更多的乐趣)。 我在Scala中创建一个单例的东西 现在,在OldJava.java中 我应该填写什么以便Java调用showMyPower方法?我尝试了两者 ,但没有任何效果。 (使用Jad反编译类文件,除了胡说八道之外,什么都没给我显示。) 编辑 我删除了声明,scala产生了预期的静态方法。(打电话