从Scala Object获取案例对象

时间:2015-12-30 13:55:12

标签: java scala

如何从java类访问CALL_INDEX对象:

MyStrategy.scala

trait CallStrategy 
object CallStrategy {
  case object CALL_INDEX extends CallStrategy 
}

trait MyStrategy { def random(as: CallStrategy) } 

object MyStrategy extends MyStrategy 
{
   def random(as: CallStrategy) = { //Some code }
}

在另一个scala文件中,我可以使用以下命令访问CALL_INDEXCallStrategy.CALL_INDEX

但在java中,我无法按如下方式访问它:

StrategyUser.java

CallStrategy$ callStrategy = CallStrategy$.MODULE$;
MyStrategy$ myStrategy = MyStrategy$.MODULE$;
myStrategy.random(callStrategy); // compile time error

上面的java代码给出了编译时错误:

The method random(CallStrategy) in the type MyStrategy$ is not applicable for the arguments (CallStrategy$)

我通过以下方面的帮助使用了上面的java代码:

How do I "get" a Scala case object from Java?

更新

请参阅下图以获得澄清:

enter image description here

即使我在代码中添加了两个语句,但仍然存在相同的编译时错误:

enter image description here

2 个答案:

答案 0 :(得分:1)

CallStrategy callStrategy = CallStrategy$.MODULE$.CALL_INDEX$.MODULE$

您当前的代码根本没有提到CALL_INDEX:它相当于Scala中的MyStrategy.random(CallStrategy)

答案 1 :(得分:0)

您应该执行以下操作:

MyStrategy$.MODULE$.random(CallStrategy.CALL_INDEX$.MODULE$);

在您的代码中,您尝试从CallStrategy对象访问CALL_INDEX,而在CallStrategy界面中可以使用它。

更新1 :(完整代码)

<强> MyStrategy.scala:

trait CallStrategy

object CallStrategy {
  case object CALL_INDEX extends CallStrategy
}

trait MyStrategy {
  def random(as: CallStrategy)
}

object MyStrategy extends MyStrategy {
  def random(as: CallStrategy) = {
    println(as)
  }
}

<强> StrategyUser.java:

public class StrategyUser {
    public static void main(String[] args) {
        MyStrategy$.MODULE$.random(CallStrategy.CALL_INDEX$.MODULE$);
    }
}

我是使用scala版本'2.11.7'和java版本'1.7.0_75'