繁体   English   中英

如何在Java中传递Scala对象引用?

[英]How can I pass a Scala object reference around in Java?

我想从Java方法返回对Scala对象的引用。 我怎样才能做到这一点?

我的Scala对象是这样的:

trait Environment 

object LocalEnvironment extends Environment {...}
object ServerEnvironment extends Environment {...}

...我希望我的Java方法是这样的:

Environment getEnvironment() { return LocalEnvironment; }  // DOES NOT COMPILE

有没有办法做到这一点?

虽然$ .MODULE $方法有效,但是使用Scala对象获得Java-interop的一种稍微不那么刺耳的方法是将对象作为一种方法暴露给自己。

斯卡拉:

object LocalEnvironment extends Environment{
   def instance = this
}

Java:

Environment getEnvironment() { return LocalEnvironment.instance(); }  

这是有效的,因为在底层,.instance()是作为LocalEnvironment类的静态方法实现的。 出于此目的,已经有一些关于Scala对象默认获得“实例”方法的讨论。

{ return LocalEnvironment$.MODULE$; }

应该管用。


编辑:这就是为什么Scala代表单例对象的原因。 ObjectName$类中有一个名为MODULE$的字段,该字段填充了该类的单个有效实例。 但是还有一个名为ObjectName的类将所有方法复制为静态方法。 这样你就可以像Java一样使用它(在大多数情况下只调用ObjectName.methodName ),而Scala可以有一个真正的类来传递。

但是当Java需要传递类时 - 不是通常使用一堆静态方法完成的事情,这是设计用Java模拟的object - 然后你必须知道Scala如何在内部表示它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM