如何从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_INDEX
:
CallStrategy.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?
更新
请参阅下图以获得澄清:
即使我在代码中添加了两个语句,但仍然存在相同的编译时错误:
答案 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'