scala - 如何允许调用者调用案例类字段的方法?
问题描述
我不确定此模式的关键字,如果问题不清楚,请见谅。
如果你有:
case class MyFancyWrapper(
somethingElse: Any,
heavyComplexObject: CrazyThing
)
val w = MyFancyWrapper(???, complexThing)
我希望能够w.method
使用来自complexThing
. 我尝试过,extends CrazyThing
但这是一个特点,我不想实现所有非常乏味的方法。我也不想这样做:
def method1 = heavyComplexObject.method1
...
为他们所有人。
有什么解决办法吗?
谢谢。
解决方案
您可以使用宏来执行此操作,但我同意 Luis 的观点,即这是一种矫枉过正的做法。宏旨在重复无聊的事情,而不是一次无聊的事情。此外,这并不像听起来那么简单,因为您可能不想通过所有方法(您可能仍然想要自己的hashCode
and equals
)。最后,宏的 IDE 支持很差,所以很可能所有这些方法都没有自动完成功能。另一方面,如果你确实使用了一个好的 IDE(比如 IDEA),那么很可能有一个像“委托方法”这样的操作会为你生成大部分代码。您仍然需要将返回类型从 to 更改Unit
为MyFancyWrapper
并在每个方法的末尾添加返回this
,但这可以通过批量替换操作轻松完成(提示:将“ }
”替换为“this }
" 并且自动重新格式化代码应该可以解决问题)
以下是 JetBrains IDEA 的一些流程截图:
推荐阅读
- excel - 文本框中的 VBA 用户未从工作表中填充
- azure - 访客用户的访问令牌和身份验证
- java - 将此对象转换为泛型类型如何工作?
- java - 我的接收器没有显示通知 - 为什么?
- c# - HttpResponseMessage JSON
- 3d - 创建大型 3D 对象并将其加载到 Cesium
- dart - Flutter - 在 BottomNavigationBar 中显示一个 PopupMenuButton
- webpack - Babel 6 到 7 升级
- javascript - 如何在 Reactjs 上实现动态视频高图
- amazon-s3 - 如何播放存在于 wowza 内容文件夹中的 smil 文件及其在 s3 存储桶中的 vod 源文件