当前位置: 首页 > 面试题库 >

您如何从Java调用Scala单例方法?

管翼
2023-03-14
问题内容

我试图将一些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编译器中的错误


问题答案:

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

伴侣对象和Java静态方法

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

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

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



 类似资料:
  • 问题内容: Java代码: Scala代码: 命令行: 问题答案: 我将从使用java.util.Timer开始,而不是从javax.swing.Timer开始。除非您使用GUI运行应用程序,否则swing计时器将不起作用(即,如果您在没有特殊命令行参数的情况下通过控制台在Linux上运行它,则它将不起作用- 最好避免)。 放在一边: 请确保在尝试运行代码时,在类路径中包含scala-librar

  • 问题内容: 我正在使用Mozilla Rhino JavaScript模拟器。它允许我将Java方法添加到上下文中,然后像调用JavaScript函数一样调用它们。但是我无法使用它,除非使用静态方法。 问题是文档的这一部分: 如果该方法不是静态的,则Java的“ this”值将对应于JavaScript的“ this”值。任何使用不正确的Java类型的’this’值调用该函数的尝试都会导致错误。

  • 问题内容: 我有一个Scala对象,需要在Java类中使用。 这是Scala对象 如何在Java中使用此Scala对象? 到目前为止,我已经尝试了以下操作,但未成功(编译错误): //返回一个没有用的字符串,因为我想要实际的Person对象 问题答案: 编辑 :一个工作示例(我检查过,它可以编译并工作):Scala: Java对应项:

  • 问题内容: 我正在使用REPL用Scala数组调用Java vararg方法。 如果执行此操作,则会出现错误: 但是,如果我这样做,那就行得通: 我的问题是怎么办?Scala API在哪里定义? 问题答案: 添加告诉编译器将数组视为varargs。Scala与Java的工作原理相同。如果我有方法 我可以这样称呼它: 但是,如果我想向其传递实际的序列(与一样),我会这样做:

  • 问题内容: 目前,我仅有的信息是浏览器状态栏中的单行错误消息。 例如,您知道如何获取堆栈跟踪吗? 问题答案: 本文有点陈旧,但仍然有意义(包括标题为“如何在Java插件中调试小程序”的部分)。 编辑:获取堆栈跟踪的更好方法是使用Java插件控制台。如果您在该窗口中点击“ t”,则会看到以下内容: 打印出所有现有的线程组。显示的第一个组是主组。ac表示有效计数;它是线程组及其子线程组中活动线程的总数

  • 问题内容: 我在Java项目中使用Jython。 我有一个Java类:和一个Python类: Python文件如下: 现在的问题是我想从Java文件的方法调用Python文件的方法并打印结果。 问题答案: 如果我没看错文档,则可以使用以下功能: 或者,如果您想获取字符串: 如果要向其提供Java变量的某些输入,则可以预先使用,而不要在Python代码中使用该变量名: