【问题标题】:Convert from scala.collection.Seq<String> to java.util.List<String> in Java code在 Java 代码中从 scala.collection.Seq<String> 转换为 java.util.List<String>
【发布时间】:2023-03-31 19:23:02
【问题描述】:

我正在从 Java 调用 Scala 方法。我需要进行从 Seq 到 List 的转换。

我不能修改Scala方法的签名,所以我不能使用scala.collection.JavaConversions._中的asJavaCollection方法

关于如何实现这一点的任何想法?

使用 Scala 2.9.3

【问题讨论】:

    标签: java scala type-conversion scala-java-interop


    【解决方案1】:

    使用JavaConversions,您在正确的轨道上,但是您需要进行此特定转换的方法是seqAsJavaList

    java.util.List<String> convert(scala.collection.Seq<String> seq) {
        return scala.collection.JavaConversions.seqAsJavaList(seq);
    }
    

    更新JavaConversions 已弃用,但在JavaConverters 中可以找到相同的功能。

    java.util.List<String> convert(scala.collection.Seq<String> seq) {
        return scala.collection.JavaConverters.seqAsJavaList(seq);
    }
    

    【讨论】:

    • 我无法在 Eclipse 中 import scala.collection.JavaConversions;。它在这里显示错误
    • 不确定这是否是新的,但我必须通过seqAsJavaList(seq).asJava 获得实际的List&lt;E&gt;
    • 刚刚添加了一个匿名编辑,以使用新的 JavaConverters 类(自 2.8.1 起)。希望会被批准。
    • @Decoded:感谢您的改进 :) 我没有按原样接受编辑,因为我希望答案在问题的上下文中仍然有意义,但我添加了一个使用JavaConverters.
    • 谢谢!喜欢走在最前沿:D
    【解决方案2】:

    从 Scala 2.9 开始,您不应该使用来自 JavaConversions 的隐式,因为它们已被弃用并且很快将被删除。相反,要将Seq 转换为java List 使用convert 这样的包(虽然它看起来不太好):

    import scala.collection.convert.WrapAsJava$;
    
    public class Test {
        java.util.List<String> convert(scala.collection.Seq<String> seq) {
            return WrapAsJava$.MODULE$.seqAsJavaList(seq);
        }
    }
    

    【讨论】:

    • scala 为这些类型的转换提供一组对 java 更友好的前端方法可能是个好主意。
    【解决方案3】:

    从 2.12 开始,这是推荐的方式:

    public static <T> java.util.List<T> convert(scala.collection.Seq<T> seq) {
        return scala.collection.JavaConverters.seqAsJavaList(seq);
    }
    

    所有其他方法@deprecated("use JavaConverters or consider ToJavaImplicits", since="2.12.0")

    【讨论】:

      【解决方案4】:

      (如果你想在 Scala 代码中进行这种转换)

      您可以使用 JavaConverters 让这变得非常简单。

      import collection.JavaConverters._
      val s: Seq[String] = ...
      val list: java.util.List<String> = s.asJava
      

      【讨论】:

      • 问题要求转换为 Java 代码,而不是 Scala 代码。
      • 啊,我的错,我知道我觉得奇怪的是,还没有人提出这个解决方案——现在说得通了。
      猜你喜欢
      • 2011-02-22
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 2021-07-25
      • 2011-02-02
      相关资源
      最近更新 更多