小编典典

从java访问案例对象(scala)

java

我试图将一些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)但没有任何效果。

(使用Jad反编译类文件,除了胡说八道之外,什么都没给我显示。)

编辑 我删除了class ScalaPower声明,scala产生了预期的静态方法。(呼吁org.fun.ScalaPower.showMyPower(10)工作)。

想知道这是否是scala编译器中的错误


阅读 209

收藏
2020-11-26

共1个答案

小编典典

我认为这间接地涵盖了它:

伴侣对象和Java静态方法

关于伴随对象,还有另一件事要了解。每当您定义要用作应用程序入口点的主要方法时,Scala都会要求您将其放入对象中。但是,在撰写本文时,不能在同伴对象中定义主要方法。由于生成的代码中有实现细节,因此JVM找不到主要方法。以后的版本中可能会解决此问题。现在,您必须在单例对象(即“非同伴”对象)[ScalaTips]中定义任何主要方法。考虑以下尝试定义main的简单Person类和伴随对象的示例。

如在此处找到:http :
//programming-scala.labs.oreilly.com/ch06.html

简而言之,因为您的对象是一个伴随对象(具有伴随类),所以您不能像预期的那样调用它。如您所见,如果您摆脱了该类,它将起作用。

2020-11-26