首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含原语的Scala集合的安全转换

包含原语的Scala集合的安全转换
EN

Stack Overflow用户
提问于 2017-07-18 16:43:44
回答 1查看 206关注 0票数 1

我正在从事混合Java项目,而且经常需要转换集合。

当我想转换一个原语集合时,我应该写这样的东西

代码语言:javascript
复制
val coll: Seq[Int] = Seq(1, 2, 3)

import scala.collection.JavaConverters._

val jColl = coll.map(v => Int.box(v)).asJava

但是,我知道对于Java和Scala,泛型集合都使用装箱值,所以我可以安全地避免使用不必要的装箱来迭代,只需编写

代码语言:javascript
复制
val jColl = coll.asJava.asInstanceOf[java.util.List[java.lang.Integer]]

但是,如果我在集合类型或元素类型中出错,编译器不会抱怨。

是否有一种类型安全的方法来避免额外的迭代?是否至少有一种方法来保存对集合类型的检查?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-18 19:42:32

好吧,我想不出一种避免scala.Int -> java.lang.Integer转换有点手工或不安全的方法,但是如果您只实现它一次并重用它,它几乎可以消除风险。

一种办法可能是:

代码语言:javascript
复制
import scala.language.higherKinds
implicit class IntCollectionBoxer[C[_] <: java.lang.Iterable[_]](elems: C[Int]) {
  def asJavaBoxed: C[java.lang.Integer] = elems.asInstanceOf[C[java.lang.Integer]]
}

(重复使用双类型和其他类型)

接下来的用法将是这样的,很难在以下方面犯错误:

代码语言:javascript
复制
val jColl = coll.asJava.asJavaBoxed

您可能也希望根据您的使用情况更改C上的绑定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45172695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档