Java静态类成员和Scala互操作性
从《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
对象打印选项{
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