【问题标题】:How to invoke a concrete Scala trait method from Java?如何从 Java 调用具体的 Scala 特征方法?
【发布时间】:2014-03-12 15:36:12
【问题描述】:

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

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

【问题讨论】:

  • 请显示您的trait 的代码 - 我假设make 是在trait Index 上实现的,但这是一个假设,鉴于Index$class.make 不起作用可能是错误的

标签: java scala traits


【解决方案1】:

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 {
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-05
      • 2018-12-18
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      • 2016-07-01
      • 2022-12-31
      • 2023-04-03
      • 2023-03-13
      相关资源
      最近更新 更多