代码之家  ›  专栏  ›  技术社区  ›  Kevin Wright

将Java迁移到Scala

  •  28
  • Kevin Wright  · 技术社区  · 14 年前

    在逐渐将现有的Java代码库迁移到Scala时,需要注意的最重要的点和解决方法是什么?中间阶段(可能很长),两种语言都在使用。

    我想的是:

    • 不同的集合层次结构
    • Scala结构在Java中不实用
    • 编译顺序
    • 框架中的不变性支持
    5 回复  |  直到 13 年前
        1
  •  27
  •   Viktor Klang    14 年前

    斯卡拉不喜欢:

    • 静态方法和变量(特别是在超级类中)
    • 原始类型

    Java不喜欢:

    • Scala对象特征
    • actors(除了Scarlett Johansson和Akka actors,因为他们有一个Java API)
    • 含蓄的,尤指表现出来的
    • 高级类型构造(高级类型、结构类型、抽象类型变量)
        2
  •  8
  •   oxbow_lakes    14 年前

    最初(即迁移的第一阶段),我会说您不想导出一个API(interface/public method等)和一个难以使用的from Java scala构造。

    • scala库类(函数类型、集合等)
    • 高级泛型类型签名
    • 隐含的

    如果您有任何api(特别是要迁移的面向客户端的api),我将从头开始在Scala中重新设计它们;最初使用Java后端。然后我会慢慢地吃掉中间的代码。

    在您强调的要点中,我同意 斯卡拉和 可变的

    范式不匹配的另一个要点是如何转换 同时发生的 java.util.concurrent ). 当然,这个可以转换 但问题是是否将基于around锁定的并发模型替换为基于around的并发模型 actors STM . 无论是哪种情况,这也可能是一个完整的重新设计,而不是转换 .

        3
  •  8
  •   pedrofurla    14 年前

    可以 给一些关于这个主题的见解是 Sneaking Scala Into Your Organization 大卫·科普兰。

        4
  •  3
  •   Kevin Wright    14 年前

    @BeanProperty 然后作为JavaBean属性公开的注释。这样,每种语言都可以使用当地的习语。

    @BeanInfo 注释也可以在类级别上用于类似的目的,但是在这里必须小心——当使用@BeanInfo时,任何额外自定义定义为setXXX或getXXX的方法都不会通过bean内省公开。这一点很重要,因为如果还想处理Scala列表和Java列表之间的转换,则必须手动编写集合类型的getter/setter。

        5
  •  1
  •   wheaties    14 年前

    如果你将你的单元测试引入到一个很好的Scala测试框架中,比如ScalaTest和一个直接翻译,你可能会发现你正在测试的并不是你之前测试的。在进行迁移时,重要的是将代码的意图与测试放在一起,而不是允许思想的碎片化。

    推荐文章