微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将Scala变量转换为Java对象… varargs

我有一个 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐