将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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |