加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:14:57 所属栏目:安全 来源:网络整理
导读:我有一个 Java类来记录这样一个方法的东西: void info(Object message,Object... params); 在Scala中,我创建了一个这样的一个包装器,看起来像这样: def info(msg: = String,params: Any*) { log.info(msg,params);} 当我打电话: val host = "127.0.0.1"va
我有一个 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读