在Scala中使用Java库

时间:2013-03-19 18:03:01

标签: java scala scala-java-interop

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

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

public class HelloWorld {

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

}

等效的Scala代码是什么?

3 个答案:

答案 0 :(得分:33)

在你的例子中,你只有一个main,而不是你必须从其他地方调用的函数。但是,我们说你确实有像

这样的功能
package com.example.hello;

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

(为了完整性,我还为你的例子添加了一个包)。然后在Scala代码中,您可以执行以下操作:

import com.example.hello._

(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可能会比较棘手。

答案 1 :(得分:4)

等效代码为:

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!

答案 2 :(得分:2)

object HelloWorld{
      def main(args: Array[String]): Unit = {
      println("hello world")
    }

}

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