首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将遗留Java代码转换为Scala功能成语

将遗留Java代码转换为Scala功能成语
EN

Stack Overflow用户
提问于 2014-04-16 14:52:15
回答 2查看 122关注 0票数 0

我正在研究一些遗留的Java代码,这些代码现在必须转换为新的Scala系统。遗留代码如下所示。在新的Scala项目中,我将所有Java值对象作为案例类,您推荐将这个Java (OO样式和副作用)转移到Scala (没有副作用、变异等)的最佳方法是什么?

编辑 collectFirst看起来适合于Java吗?

代码语言:javascript
复制
ln.collectFirst{case l if(availableSlot(allowedSection,vehicle,l)) >1 => vehicle.copy(allocatedSlot = Some(5), allocatedLane = Some(l))}
EN

回答 2

Stack Overflow用户

发布于 2014-04-16 15:10:13

所有案例类都附带了一个copy方法,该方法返回一个新的case类副本,并更新了选择字段:

代码语言:javascript
复制
vehicle.copy(allocation = 5, name = "new name")

对于转换使用null的代码,请使用Option代替。理想情况下,您应该重写所有内容以使用Option,但作为临时措施,您可以将调用包装到在Option中返回null的方法。

代码语言:javascript
复制
val allowedSection: Section = Option(
  new Tools().getRequest(serviceEndpoint, vehicle.getStep(), serviceUser, servicePassword)
).getOrElse(Section(name = vehicle.step))
票数 1
EN

Stack Overflow用户

发布于 2014-04-16 17:49:54

根据我的经验,在将命令式代码移植到functional时,最好先进行一般性清理,然后再进行不明显安全和不正确的更改。

  • vars到vars
  • OptionT everywhere空值可能发生
  • 一元地图/前景图,而不是if图
  • 用于映射/筛选循环
  • ArrayLists和Hashtable等不可变集合
  • 一般重命名和重构
  • 以迁移到ADT为目标的密封/最终标记类型
  • 将常见模式提取到Scala成语中,例如使用隐式类的infix操作。

然后,代码就会变得更加明显,功能模式就会出现,并且很容易实现,比如变类到不可变类。此外,重写有状态循环以映射/筛选/折叠并不简单,必须注意细节,所有这一切都需要一个可读的代码库。

例如,为了避免“易碎”,在进行筛选/折叠之前,您必须坚定地理解迭代的语义。

此外,永远记住使用重构工具,并尽量避免“手动”更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23112952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档