相关疑难解决方法(0)

将Scala varargs转换为Java Object ... varargs

我有一个Java类,它记录的东西有这样的方法:

void info(Object message, Object... params);
Run Code Online (Sandbox Code Playgroud)

在Scala中,我创建了一个围绕这样调用的包装器,如下所示:

def info(msg: => String, params: Any*) {
  log.info(msg, params);
}
Run Code Online (Sandbox Code Playgroud)

我打电话的时候:

val host = "127.0.0.1"
val port = "1234"
info("Start on {0}:{1}", host, port)
Run Code Online (Sandbox Code Playgroud)

我明白了:

"Started on WrappedArray(127.0.0.1, 1234):{1}"
Run Code Online (Sandbox Code Playgroud)

现在,有没有人现在如何将params转换为可以正确使用的Object []?

我试着这样做:

def info(msg: => String, params: Any*)
  log.info(msg, params.toList.toArray);
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

"Started on [Ljava.lang.Object;@14a18d:{1}"
Run Code Online (Sandbox Code Playgroud)

你做的时候会发生类似的事情:

params.asInstanceOf[WrappedArray[Object]].array
Run Code Online (Sandbox Code Playgroud)

scala scala-2.8

13
推荐指数
2
解决办法
2980
查看次数

标签 统计

scala ×1

scala-2.8 ×1