我有疑问我希望有人指导我 我可以使用所有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中转换代码吗? 感谢
答案 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的版本,但这是唯一可以被视为不方便的内容。