用于Java兼容性的Scala API设计

时间:2013-05-02 13:53:15

标签: java api scala

假设我有以下Scala API,我打算从Scala和Java调用它:

sealed abstract class InterpMethod
case object InterpLinear extends InterpMethod
case object InterpNearest extends InterpMethod
case object InterpSpline extends InterpMethod

class Interpolator {
  def interp(method: InterpMethod) = method match {
    case InterpLinear => { ... }
    case InterpNearest => { ... }
    case InterpSpline => { ... }
  }
}

object Interpolator { def apply() = new Interpolator }

// Scala Usage:
import myPackage._
Interpolator.interp(InterpNearest)

// Java Usage:
import myPackage.*
Interpolator myInterp = new Interpolator()
myInterp.interp(InterpNearest)

在Scala中运行良好。 Java抛出编译错误:InterpNearest cannot be resolved to a variable

有一个简单的解决方法吗?或者更好的方法来定义更友好的Java参数?将参数定义为闭包会更好吗?

任何最佳做法或解决方法都将受到赞赏。这是为了更大fluent interface的一部分。我的关键标准是它需要在Java和Scala中都可用且干净。

1 个答案:

答案 0 :(得分:0)

http://lampwww.epfl.ch/~michelou/scala/using-scala-from-java.html说你可以调用这样的对象:

IterpNearest$.MODULE$

这不是很好。我猜你应该选择@ millimoose的建议。