2010-04-21 39 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

相关问题