2010-04-21 41 views

回答

20

This article是與Martin Odersky(Scala的創建者)的一次討論,幷包含Scala爲了與Java兼容而作出的妥協。文中提到:

  1. 的方法靜態重載
  2. 有兩個性狀和類
  3. 夾雜null指針。
+0

很好的參考。 +1 – VonC 2010-04-21 19:22:10

26

我知道的兩個最重要的妥協是:

  • type erasure(「reflecting on Type」):它有​​繞過Java編譯(獨立於JVM的,爲了向後兼容的原因)。
  • 收集原始類型:例如: - 在斯卡拉2.8處理陣列arrays

    新方案。相反,裝箱/拆箱和其他編譯器法寶的方案依賴於隱式轉換和艙單集成陣列

這些是兩個主要的JVM的限制,當它涉及到管理的通用型(邊界):該Java JVM並不保留通用對象中使用的確切類型,它具有「原始」類型。


但你也可以考慮:

爲了覆蓋儘可能多的可能性,可能的話,Scala中提供:

  • 常規E類一般地,huge number of static types通過Scala的需要(對於大多數)在Java中產生引入類型,
  • 值類類型,
  • 非空類型,
  • 單子種類,
  • 特徵類型,
  • 單例對象類型(過程模塊,實用類等)),
  • 複合類型,
  • 功能類型,
  • 案例類,
  • 路徑依賴的類型,
  • 匿名類型,
  • 自我類型,
  • 類型別名,
  • 通用
  • 協變通用類型,
  • Cont ravariant泛型類型,
  • 界泛型類型,
  • 抽象類型,
  • 生存類型,
  • 隱式類型,
  • 增強型,
  • 查看界類型,並
  • 結構類型,允許當一切都失敗時,鴨子打字的一種形式
+0

注意自我:類型列表是詳細的(與鏈接)在http://stackoverflow.com/questions/3112725/advantages-of-scalas-type-system/3113741#3113741 – VonC 2010-06-26 15:30:02

3

與文化宿醉相比,運行時問題更少:通用平等,哈希,toString。

與虛擬機的關係更爲密切:缺省評估嚴格,不純功能,例外。

+0

+1,用於通用平等和散列。通用'toString'有什麼問題? – missingfaktor 2010-04-23 19:53:13

+0

1)很容易意外地向用戶顯示「Object#toString」。 2)'Collection [A]#toString'在顯示'A'類型的元素的方式上是不靈活的。請參閱'scalaz.Show'來尋找替代方案。 – retronym 2010-04-23 21:23:13

+0

好的。感謝您的迴應。 – missingfaktor 2010-04-24 12:41:31

相關問題