【问题标题】:Range class : java interoperability范围类:java互操作性
【发布时间】:2014-03-09 22:07:13
【问题描述】:

为什么这不起作用?在 Java 代码中:

import scala.collections.immutable.Range;

// ...

Range r = Range.apply(0, 10)

Eclipse 说:

类型Range中的方法apply(int)不适用于参数(int, int)

SBT 说:

错误:类 Range 中的方法应用不能应用于给定类型;

但是,在 Scala API 的 collections.immutable.Range 对象中有一个 apply(Int, Int) 方法。

【问题讨论】:

    标签: java scala interop


    【解决方案1】:

    那是因为您从Range class 调用了apply(int) 方法。您应该从the companion object 致电apply(int,int)

    import scala.collection.immutable.Range$;
    // ...
    Range r = Range$.MODULE$.apply(0, 10)
    

    有关一般信息,另请参阅this Q&A

    【讨论】:

    • 是的,但通常 scalac 会为伴随对象方法生成静态转发器。但是在这种情况下,它不能,因为Range 类已经包含一个名为apply 的方法(不管它有不同的签名)。
    • 更多关于为什么不生成静态转发器的详细信息:groups.google.com/forum/#!topic/scala-internals/FeXSYcAv2ho
    • 谢谢,我将在我的 API/DSL 中添加一个 Java 互操作对象来规避这个问题。我不希望我的用户到处写Range$.MODULE$.apply 这样的东西。
    猜你喜欢
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2010-09-06
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多