2013-09-24 46 views
0

我有問題我希望有人指導我 我可以在Scala中使用所有Java庫,如番石榴,Gson,Log4j,Spring,休眠&等? 例如,我可以將以下代碼轉換爲scala嗎? (芭樂庫)在Scala中使用Java庫嗎?

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作爲主要編程語言,但我不知道我是否可以使用Java庫但不限於在斯卡拉或不? 任何人都可以在scala中轉換上面的代碼? 感謝

+0

'我可以在沒有限制的情況下使用Java庫嗎?'可以。 '有人可以在scala中轉換上面的代碼嗎?'是的,我想即使你可以付出一點努力。請參閱[Java to Scala cheatsheet](http://techblog.realestate.com.au/java-to-scala-cheatsheet/)或[適用於Java程序員的Scala教程](http://docs.scala-lang.org /tutorials/scala-for-java-programmers.html)。 – senia

+0

您可以使用Java庫,但這並不意味着您應該避免它。 – Roch

+0

一般來說,可以,您可以在Scala中使用任何Java庫。您還將看到Scala爲您提供了許多開箱即用的功能。舉個小例子,你上面的連接是:'val fantasyGenres = Array(「Space Opera」,「Horror」,「Magic realism」,「Religion」); val joined = fantasyGenres.mkString(「,」)'不使用任何外部庫。 – maasg

回答

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的版本,但是這可以被認爲是唯一給這裏帶來不便。

5

根據Scala FAQ(強調):

標準Scala後端是一個Java虛擬機。 Scala類是Java 類,反之亦然。 您可以從另一個中的方法調用語言 的方法。您可以在Scala中擴展Java類, ,反之亦然。主要限制在於某些Scala特性不具有在Java中等效的特性,例如特性。

我是否需要將Java數據結構轉換爲Scala,反之亦然?

您不必在Scala中完全轉換Java數據結構以使用它們 。您可以「按原樣」使用它們。例如,Scala類可以 繼承Java類,可以實例化Java類Scala中,你 可以訪問方法,字段(即使它們是靜態的),等等。

3

是的,你可以透明地使用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