我正在研究一些遗留的Java代码,这些代码现在必须转换为新的Scala系统。遗留代码如下所示。在新的Scala项目中,我将所有Java值对象作为案例类,您推荐将这个Java (OO样式和副作用)转移到Scala (没有副作用、变异等)的最佳方法是什么?
编辑 collectFirst看起来适合于Java吗?
ln.collectFirst{case l if(availableSlot(allowedSection,vehicle,l)) >1 => vehicle.copy(allocatedSlot = Some(5), allocatedLane = Some(l))}发布于 2014-04-16 15:10:13
所有案例类都附带了一个copy方法,该方法返回一个新的case类副本,并更新了选择字段:
vehicle.copy(allocation = 5, name = "new name")对于转换使用null的代码,请使用Option代替。理想情况下,您应该重写所有内容以使用Option,但作为临时措施,您可以将调用包装到在Option中返回null的方法。
val allowedSection: Section = Option(
new Tools().getRequest(serviceEndpoint, vehicle.getStep(), serviceUser, servicePassword)
).getOrElse(Section(name = vehicle.step))发布于 2014-04-16 17:49:54
根据我的经验,在将命令式代码移植到functional时,最好先进行一般性清理,然后再进行不明显安全和不正确的更改。
然后,代码就会变得更加明显,功能模式就会出现,并且很容易实现,比如变类到不可变类。此外,重写有状态循环以映射/筛选/折叠并不简单,必须注意细节,所有这一切都需要一个可读的代码库。
例如,为了避免“易碎”,在进行筛选/折叠之前,您必须坚定地理解迭代的语义。
此外,永远记住使用重构工具,并尽量避免“手动”更改。
https://stackoverflow.com/questions/23112952
复制相似问题