我试图将一些Scala代码注入到现有的Java应用程序中。(所以,话说回来,我想要更多的乐趣)。
我在Scala中创建一个单例的东西
ScalaPower.scala package org.fun class ScalaPower object ScalaPower{ def showMyPower(time:Int) = { (0 to time-1).mkString(", ") } }
现在,在OldJava.java中
class OldJava { public void demo(){ System.out.println(?) } }
我应该填写什么?以便Java调用showMyPower方法?我尝试了两者 org.fun.ScalaPower.showMyPower(10),org.fun.ScalaPower.getInstance().showMyPower(10)但没有任何效果。
?
org.fun.ScalaPower.showMyPower(10)
org.fun.ScalaPower.getInstance().showMyPower(10)
(使用Jad反编译类文件,除了胡说八道之外,什么都没给我显示。)
编辑 我删除了class ScalaPower声明,scala产生了预期的静态方法。(呼吁org.fun.ScalaPower.showMyPower(10)工作)。
class ScalaPower
想知道这是否是scala编译器中的错误
我认为这间接地涵盖了它:
伴侣对象和Java静态方法 关于伴随对象,还有另一件事要了解。每当您定义要用作应用程序入口点的主要方法时,Scala都会要求您将其放入对象中。但是,在撰写本文时,不能在同伴对象中定义主要方法。由于生成的代码中有实现细节,因此JVM找不到主要方法。以后的版本中可能会解决此问题。现在,您必须在单例对象(即“非同伴”对象)[ScalaTips]中定义任何主要方法。考虑以下尝试定义main的简单Person类和伴随对象的示例。
伴侣对象和Java静态方法
关于伴随对象,还有另一件事要了解。每当您定义要用作应用程序入口点的主要方法时,Scala都会要求您将其放入对象中。但是,在撰写本文时,不能在同伴对象中定义主要方法。由于生成的代码中有实现细节,因此JVM找不到主要方法。以后的版本中可能会解决此问题。现在,您必须在单例对象(即“非同伴”对象)[ScalaTips]中定义任何主要方法。考虑以下尝试定义main的简单Person类和伴随对象的示例。
如在此处找到:http : //programming-scala.labs.oreilly.com/ch06.html
简而言之,因为您的对象是一个伴随对象(具有伴随类),所以您不能像预期的那样调用它。如您所见,如果您摆脱了该类,它将起作用。