在Scala中使用Java库?

时间:2013-09-24 08:26:46

标签: java spring hibernate scala

我有疑问我希望有人指导我 我可以使用所有Java库,如Guava,Gson,Log4j,Spring,Hibernate& Scala中等等??? 例如我可以将下面的代码转换为scala吗? (GUAVA图书馆)

import com.google.common.base.Joiner;
public class mainJ {
    public static void main(String[] args) {
        String[] fantasyGenres = {"Space Opera", "Horror", "Magic realism", "Religion"};        
        String joined = Joiner.on(',').join(fantasyGenres);
        System.out.print(joined);
    }
}

我想选择SCALA作为主要的编程语言,但我不知道我是否可以在scala中使用Java库而不受限制? 任何人都可以在scala中转换代码吗? 感谢

3 个答案:

答案 0 :(得分:5)

根据Scala FAQ(强调补充):

  

标准的Scala后端是Java VM。 Scala类是Java   类,反之亦然。 您可以调用任何一种语言的方法   来自另一个方法。您可以在Scala中扩展Java类,   反之亦然。主要限制是某些Scala功能没有   在Java中具有等价物,例如特征。

     

我是否需要将Java数据结构转换为Scala,反之亦然?

     

您根本不需要转换Java数据结构来使用它们   在斯卡拉。您可以“按原样”使用它们。例如,Scala类可以   子类Java类,您可以在Scala中实例化Java类   可以访问方法,字段(即使它们是静态的)等等。

答案 1 :(得分:3)

是的,您可以透明地在Scala中使用Java类。但是在Scala中经常有一种惯用的方式来表达更优雅的东西。对于您给出的示例,这可能是:

c:\opt>scala
Welcome to Scala version 2.10.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_25).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val fantasyGenres = List("Space Opera", "Horror", "Magic realism", "Religion")
fantasyGenres: List[String] = List(Space Opera, Horror, Magic realism, Religion)

scala> val joined = fantasyGenres.mkString(",")
joined: String = Space Opera,Horror,Magic realism,Religion

答案 2 :(得分:3)

正如其他人所指出的,您可以在Scala中轻松使用Java类。 Gyro Gearless和maasg展示了如何使用Scala的库在样品中进行番石榴的工作。您也可以使用Guava,这里可以更直接地将样本转换为Scala:

import com.google.common.base.Joiner
import scala.collection.JavaConverters._

object MainJ extends App {
  val fantasyGeneres = Array("Space Opera", "Horror", "Magic realism", "Religion")
  val joined = Joiner.on(',').join(fantasyGeneres.toIterable.asJava)
  println(joined)
}

请注意,我使用JavaConverters将Scala的Iterable转换为Java的版本,但这是唯一可以被视为不方便的内容。