如何从Java调用具体的Scala特征方法?

时间:2014-03-12 15:36:13

标签: java scala traits

我有一个Java / Scala mix Maven项目。我需要重用一个Saddle方法make,该方法具体定义为名为Index的特征的一部分。如果这有任何帮助,则定义here方法。我尝试使用Index.makeIndex$class.make从java调用该方法,但在这两种情况下都会出现error: cannot find symbol编译错误。

有没有办法从Java调用具体的Trait方法?

2 个答案:

答案 0 :(得分:5)

trait在某种意义上类似于Java接口,它不是具体的构造函数。

来自Scala:

class IndexImpl extends Index[SomeParamtersHere] {}
val x = new ClassImpl
x.make(..)

或使用对象:

object Index extends Index {}
Index.make(..)

来自Java:

具体实现的特征将编译为适当的abstract class。如果某些成员没有具体实施,则必须实施它们。

import org.saddle.Index
public class TraitImpl extends Index$class {
}

答案 1 :(得分:0)

好的,我找到了答案。像这样调用它只是因为Index trait已经有一个Index对象可用(我之前没有注意到):

Index$.MODULE$.make(rrule, startDate, endDate);