【问题标题】:Play! failing to convert java list to scala list玩!无法将 java 列表转换为 scala 列表
【发布时间】:2014-02-21 12:12:14
【问题描述】:

我正在尝试将字符串列表从我的 java 控制器传递到 scala 模板。
这是视图代码:

public static Result index() {
    List<String> scripts = Arrays.asList(
        "script1.js",
        ...
        "scriptN.js"
    );

    return ok(views.html.index.render(scripts));
}

这是临时代码:

@(scripts: List[String])

@main("test page")(scripts) {
    ... html here ...
}

我遇到的错误(在 Typesafe Activation Compile 页面中):

类索引中的方法渲染不能应用于给定类型;
必需:scala.collection.immutable.List
找到:java.util.List
原因:实际参数 java.util.List 无法通过以下方式转换为 scala.collection.immutable.List 方法调用转换

有没有办法在不使用 java > scala 转换的情况下解决它?
我发现了这个问题:Play doesn't convert java-list to scala-list,它描述了类似的情况,虽然我没有任何我知道的 templateImports,我什至没有看到 Build.scala 文件...

有什么想法吗? 谢谢!

【问题讨论】:

  • @om-nom-nom 我的问题是在 Play 的上下文中!框架,另一个不是...正如我所写,如果有戏,我想避免使用转换器!做事的方式。因此,我认为它不是重复的。
  • @om-nom-nom 不同。在这里,他希望从 Java 访问 Scala 集合,而不是链接中提到的反之亦然
  • @Jatin 他在接收端有 Scala 列表(无论哪种语言),并尝试将 java 列表推入其中。我看不出它与尝试以类似 scala 的方式迭代 java 列表有什么不同(即使他有相反的情况,它仍然很可能是重复的)
  • 您可以使用@(scripts: java.util.List[String]) 并在需要时将其转换吗?导入JavaConverters._ 后应该只是scripts.asScala.toList

标签: java scala playframework playframework-2.0


【解决方案1】:

试试下面:

import scala.collection.JavaConverters;

public static Result index() {
    List<String> scripts = Arrays.asList(
        "script1.js",
        ...
        "scriptN.js"
    );
    scala.collection.immutable.List<String> ls = JavaConverters.asScalaBufferConverter(scripts).asScala().toList();
    return ok(views.html.index.render(ls));
}

【讨论】:

  • 谢谢!没有toList 方法,有asScala 但它返回Buffer&lt;String&gt;
  • 哦。没关系,我只需要同时使用这两个...JavaConverters.asScalaBufferConverter(scripts).asScala().toList()
  • @NitzanTomer 抱歉,这是一个错误。它是asScala().toList()。这将工作
  • 谢谢。我会给它更多时间,因为如果有更好的方法,我宁愿避免使用JavaConverters!如果没有更好的表现,我会将您的答案标记为正确的。
【解决方案2】:

在您的模板代码中尝试以下操作:

@import java.util   
@(scripts: util.List[String])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多