gpt4 book ai didi

java - 集合中 Scala.Long 和 Java.lang.Long 之间的隐式转换

转载 作者:搜寻专家 更新时间:2023-10-31 08:14:57 25 4
gpt4 key购买 nike

我正在使用 JavaConverters 将 Java SortedSet 转换为 Vector。

    val lines = function.getInstructions.asScala.toVector

我的 getInstructions 函数返回一个 java.lang.Long 的 ArrayList,但消费代码需要 Scala.Long。有没有一种方法可以在不将我所有的使用代码更改为使用 Java.lang.Long 的情况下执行此操作?

此外,有没有一种方法可以隐式转换为值类,以允许随机访问 ArrayList 而无需像上面那样分配额外的对象?非常感谢您提供的任何见解。

最佳答案

Scala 有自动装箱功能,所以很多时候 scala.Longjava.lang.Long。当值存储在像 Vector 这样的集合中时,几乎总是这样。目前可以安全地执行 .asInstanceOf[Vector[scala.Long]] 来转换 Vector 的类型,但是这 could change in the future .

更安全的方法是显式转换值。 Scala 可以在 scala.Longjava.lang.Long 之间进行隐式转换,但它们不会转换这些类型的集合。但是,您可以将它们与 map 组合起来进行转换,例如.map(Long2long)java.lang.Long 的集合转换为 scala.Long 的集合。

关于你的第二个问题,如果你导入 scala.collection.JavaConversions._ 而不是 JavaConverters 你会得到一组隐式转换。但是,推荐的方法是使用 JavaConverters。在您的情况下,它也会更有效率,因为包装器只需创建一次。

如果你真的喜欢快速和危险的游戏,你可以编写自己的隐式转换:

implicit def convArrayList(al: ArrayList[java.lang.Long]): Vector[Long] =
al.asScala.map(Long2long)(collection.breakOut)

关于java - 集合中 Scala.Long 和 Java.lang.Long 之间的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24620574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com