Java静态类成员和Scala互操作性

Java静态类成员和Scala互操作性,java,scala,scala-java-interop,Java,Scala,Scala Java Interop,从《Scala编程语言概述》第二版: //Scala 对象打印选项{ def main(参数:数组[字符串]):单位={ System.out.println(“所选选项:”) 对于(val arg,这仅仅意味着scala不会对初始java代码进行任何更改,其中静态成员和非静态成员位于同一个类中 因此,你的第二个假设是正确的,第一个假设是错误的 我想这本书使用的是 强>而不是解释< /强>,因为如果你想到“解释的语言”(这在上下文中是没有意义的),最后一个词可能有不同的含义。 < P>我认为你可

从《Scala编程语言概述》第二版:

//Scala
对象打印选项{
def main(参数:数组[字符串]):单位={
System.out.println(“所选选项:”)

对于(val arg,这仅仅意味着scala不会对初始java代码进行任何更改,其中静态成员和非静态成员位于同一个类中

因此,你的第二个假设是正确的,第一个假设是错误的


我想这本书使用的是<强> <>强>而不是<强>解释< /强>,因为如果你想到“解释的语言”(这在上下文中是没有意义的),最后一个词可能有不同的含义。

< P>我认为你可能被java假设蒙蔽了。
X.Y()
这意味着正在对象
X
上调用方法
Y
,或者在
X
隐式转换为的其他对象上调用方法

也许这看起来并不奇怪,或者你没有发现任何问题,所以让我们明确说明一个结果:X永远不会是一个类

很自然,这就给Java带来了一个关于静态成员的严重互操作性问题,这就是为什么Java类
X
的静态成员将被“视”为单例对象的原因:否则,您将永远无法使用它们

请注意,Scala的singleton对象是真正的对象——它们是singleton类的实例。但是,具有静态成员的Java类不会为单个对象提供原点。实际上,这意味着这一行:

val x = X

如果
X
是一个Scala单例对象,它将起作用,但如果它是一个具有静态成员的Java类,它将不起作用。

与您的编辑相关:问题是?;)
val x = X