捕获varargs参数的类型

Itt*_*ayD 3 scala

我想定义一个接受varargs的方法,这样即使在null的情况下,我也可以获得调用它的类型.

def foo(args: Any*) = ....

val s: String = null

foo(1, s) // i'd like to be able to tell in foo that args(0) is Int, args(1) is String
Run Code Online (Sandbox Code Playgroud)

Mic*_*mer 6

如果您使用的Any是参数类型,则无法静态确定参数的类型.您将不得不使用instanceof或模式匹配:

def foo(args: Any*) = for (a <- args) a match {
  case i: Int =>
  case s: String =>
  case _ =>
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不能处理空值.

如果你想要静态类型,你将不得不使用重载:

def foo[A](arg1: A)
def foo[A, B](arg1: A, arg2: B)
def foo[A, B, C](arg1: A, arg2: B, arg3: C)
...
Run Code Online (Sandbox Code Playgroud)