将Java迁移到Scala

Kev*_*ght 28 java migration scala scala-java-interop

在将现有Java代码库逐步迁移到Scala时,需要注意哪些最重要的要点和解决方法?具有(可能非常长)的中间阶段,其中两种语言都在使用中.

我正在考虑的事情是:

  • 不同的集合层次结构
  • Scala无法很好地处理的Java构造
  • Scala构造在Java中使用是不切实际的
  • 构建工具
  • 编译顺序
  • 框架中的不变性支持
  • 等等

Lan*_*dei 27

Scala不喜欢:

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

Java不喜欢:

  • Scala对象特征
  • 关闭
  • 演员(Scarlett Johansson和Akka Actors除外,因为他们有Java API)
  • 暗示,特别是清单
  • 高级类型构造(更高级的类型,结构类型,抽象类型变量)

  • +1只是为了让Scarlett J.在你的答案中工作.剩下的也很不错. (15认同)
  • 斯卡拉约翰逊也是一个好演员:) http://a2.twimg.com/profile_images/1032519878/scalajohansson.jpg (4认同)
  • 用图片会更好! (2认同)

oxb*_*kes 8

最初(即迁移的第一阶段),我想说你不想用难以使用的Java scala结构导出API(接口/公共方法等).

在实践中,我会将此限制为导出任何特定于scala的内容(同样,我在这里谈论迁移的第一阶段):

  • scala库类(函数类型,集合等)
  • 更高级的通用类型签名
  • implicits

那又是什么呢?那么,类的内部(私有方法,字段等)可以转换为使用scala构造和库类.

如果您有任何API(特别是您打算迁移的面向客户端的API),我会在Scala中重新设计它们; 最初使用Java后端.然后我会慢慢吃掉中间的代码.

在你强调的要点中,我同意Scala 的不可变范式和Java 的可变范式不能很好地混合.我发现的其他几点问题较少.

范式不匹配的另一个要点是如何转换您拥有的任何并发代码(即使用的代码java.util.concurrent).当然,这可以按原样转换,但问题是是否基于围绕actorSTM的锁定替换并发模型.在任何一种情况下,这也可能是完全重新设计,而不是转换本身.


ped*_*rla 8

一个很好的演示文稿可以提供一些关于主题的见解,是由David Copeland将Scala Scala Into Your Organization.