我有一个
Java类来记录这样一个方法的东西:
void info(Object message, Object... params);
在Scala中,我创建了一个这样的一个包装器,看起来像这样:
def info(msg: => String, params: Any*) {
log.info(msg, params);
}
当我打电话:
val host = "127.0.0.1"
val port = "1234"
info("Start on {0}:{1}", host, port)
我得到:
"Started on WrappedArray(127.0.0.1, 1234):{1}"
现在,现在有人现在怎么将params转换成可以正常使用的Object []?
我试图做:
def info(msg: => String, params: Any*)
log.info(msg, params.toList.toArray);
}
但这不行:
"Started on [Ljava.lang.Object;@14a18d:{1}"
类似的事情发生在你做的时候:
params.asInstanceOf[WrappedArray[Object]].array
找到答案:
log.info(msg, params.map(_.asInstanceOf[AnyRef]) : _*)
以下返回Seq [AnyRef] => params.map(_.asInstanceOf [AnyRef])和’:_ *’部分告诉编译器将其作为varargs
结果:
"Started on 127.0.0.1:1234"
此外,此解决方案涉及AnyVals和AnyRefs