【问题标题】:Using Java libraries in Scala在 Scala 中使用 Java 库
【发布时间】:2013-03-08 13:50:23
【问题描述】:

我是 Scala 新手。到目前为止,我只能编写基本代码,但我想开始更具体地使用它,而不仅仅是学习理论。

假设我在 HelloWorld.java 中有以下 Java 代码:

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello, World");
    }

}

从 Scala 调用它的代码是什么?

【问题讨论】:

  • @Reimeus:不。我想从 scala 调用 HelloWorld 函数?

标签: java scala scala-java-interop


【解决方案1】:

在您的示例中,您只有一个主函数,而不是您必须从其他地方调用的函数。但是假设你确实有一个类似的功能

package com.example.hello;

public class HelloWorld {
  public static void sayHello() {
    System.out.println("Hello, world!");
  }
}

(为了完整起见,我还为您的示例添加了一个包)。然后在你的 Scala 代码中,你可以这样做:

import com.example.hello._

object GreetWorld extends App {
  (0 until 10).foreach {
    HelloWorld.sayHello()
  }
}

在 Scala 中使用 Java 函数打招呼 10 次。 import 中的 ._ 导入包的所有成员,或者您也可以只导入 import com.example.hello.HelloWorld。您甚至可以使用 import com.example.hello.HelloWorld.sayHello 导入方法本身,这样您就不需要在代码中引用 HelloWorld 对象。

两种语言都编译成 JVM 字节码,因此从 Scala 调用 Java 代码非常简单,但如果涉及隐式参数,从 Java 调用 Scala 可能会比较棘手。

【讨论】:

  • 谢谢 .. 这就是我需要的 :)
  • 嗨,我可以请求你完整地编写代码。我对 scala 很陌生。我的 scala 代码块在“对象”定义中。其余的东西都是一样的。 .scala和java文件应该在同一个文件夹吗??
  • 我收到这个错误:helloworld.scl:1: error: object example is not a member of package com import com.example.hello
  • @Fraz 如果您仍有问题,请参阅上面的更改
  • (0 to 10) 是 11 次,而不是 10 次。范围包括在内。
【解决方案2】:

等效的代码是:

object HelloWorld extends App {
  println("Hello, world!")
}

如果您将该代码保存在一个名为 HelloWorld.scala 的文件中,那么您可以像这样编译和运行它:

$ scalac HelloWorld.scala

$ scala HelloWorld
Hello, world!

或者如果你在 REPL 中工作:

scala> :paste
// Entering paste mode (ctrl-D to finish)

object HelloWorld extends App {
  println("Hello, world!")
}

// Exiting paste mode, now interpreting.

defined module HelloWorld

scala> HelloWorld.main(Array.empty[String])
Hello, world!

【讨论】:

    【解决方案3】:
    object HelloWorld{
          def main(args: Array[String]): Unit = {
          println("hello world")
        }
    
    }
    

    object HelloWorld extends App {
      println("Hello, world!")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2012-07-29
      • 2011-04-21
      相关资源
      最近更新 更多